列表理解有效,但正常的 for 循环无效 - Python
List comprehention works but normal for loop doesn't - 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
通过这种方式,您可以模仿列表理解的功能,创建一个新列表并在迭代时向其追加项目。
如果你想修改你的列表'in place',你可以使用这种结构:
for idx, x in enumearte(mylist):
if type(x) == str:
mylist[idx] = 0
else:
mylist[idx] = x
但是,实际上这不太可能对您的代码效率产生太大影响。你不能用列表理解来做到这一点,在任何一种情况下,当你从函数 return 时,你都可以将新列表重新分配回你的原始变量:
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
列表理解本质上是 returns 将新值添加到您的原始列表中,所以这就是它不同的原因。
我定义了一个函数来将列表的元素更改为数字 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
通过这种方式,您可以模仿列表理解的功能,创建一个新列表并在迭代时向其追加项目。
如果你想修改你的列表'in place',你可以使用这种结构:
for idx, x in enumearte(mylist):
if type(x) == str:
mylist[idx] = 0
else:
mylist[idx] = x
但是,实际上这不太可能对您的代码效率产生太大影响。你不能用列表理解来做到这一点,在任何一种情况下,当你从函数 return 时,你都可以将新列表重新分配回你的原始变量:
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
列表理解本质上是 returns 将新值添加到您的原始列表中,所以这就是它不同的原因。