列表理解有效,但正常的循环不起作用 - Python



定义了一个函数,如果列表中的元素不是数字,则将该元素更改为数字0。它工作使用列表推导,但它不工作,当我使用一个正常的for循环。我想了解for循环中的错误是什么。

请看下面的代码:

def zerozero(mylist):

mylist = [0 if type(x) == str else x for x in mylist]

return mylist

def zerozero2(mylist):

for x in mylist:
if type(x) == str:
x = 0
else:
x = x
return mylist

第二个函数不完全相同。您需要这样的内容:

def zerozero2(mylist):
new_list = []

for x in mylist:
if type(x) == str:
new_list.append(0)
else:
new_list.append(x)
return new_list

通过这种方式,您可以模拟列表推导式的功能,创建一个新列表,并在迭代时向其添加项。

如果你想"就地"修改你的列表,你可以使用这种结构:

for idx, x in enumearte(mylist):
if type(x) == str:
mylist[idx] = 0
else:
mylist[idx] = x

然而,实际上,这不太可能对你的代码效率有太大的影响。对于列表推导式不能这样做,在这两种情况下,当您从函数返回时,您都可以将新列表重新赋值给原始变量:

mylist = zerozeroX(mylist)

你的函数返回的是和你输入的相同的列表。

你应该做的是首先创建一个空列表。例如my_list_0 = [].

def zerozero2(mylist):
my_list_0 = []
for x in mylist:
if type(x) == str:
x=0
else:
x=x
my_list_0.append(x)
return my_list_0

列表推导式实际上是将新值返回到原始列表中,所以这就是为什么它不同的原因。

相关内容

  • 没有找到相关文章

最新更新