定义了一个函数,如果列表中的元素不是数字,则将该元素更改为数字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
列表推导式实际上是将新值返回到原始列表中,所以这就是为什么它不同的原因。