列表理解有效,但正常的 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 将新值添加到您的原始列表中,所以这就是它不同的原因。