Python - "'NoneType'对象不可迭代"错误

Jas*_*rly 2 python function list

我在codecademy项目中的指示是

定义一个名为purify的函数,它接收一个数字列表,删除列表中的所有奇数,然后返回结果.例如,purify([1,2,3])应该返回[2].不要直接修改您输入的列表; 相反,返回仅包含偶数的新列表.

我提出的代码是:

def purify(numbers):

pure = numbers

for num in pure:
    if num % 2 != 0:
        pure = pure.remove(num)

return pure
Run Code Online (Sandbox Code Playgroud)

错误是:

哎呀,再试一次.您的函数在[1]上作为输入崩溃,因为您的函数抛出"'NoneType'对象不可迭代"错误.

正如我已经理解它,这意味着我的代码中的某些内容将被返回为"无".或者那里没有数据.我似乎无法找到这个简短的代码有什么问题,除非它在我的if语句中.提前致谢.

所以我在代码中进行了编辑以删除"pure = pure.remove(num)"并解决了无问题.但是,当运行代码时,它仍然无法输入[4,5,5,4]并返回[4,5,4].

新守则:

def purify(numbers):

    pure = numbers

    for num in pure:
        if num % 2 != 0:
            pure.remove(num)

    return pure
Run Code Online (Sandbox Code Playgroud)

hlt*_*hlt 6

第一个问题是您在迭代时更改列表.迭代时不要更改列表.你会错过循环中的一些值.

第二个问题是list.remove就地行动并返回无.因此,当你这样做时pure = pure.remove(num),你设置pureNone,不再可迭代,这又是导致错误的原因.相反,您可以按如下方式过滤列表

def purify(numbers):
    return [num for num in numbers if num % 2 == 0]
Run Code Online (Sandbox Code Playgroud)