如何过滤列表

use*_*806 1 python

我正在写一个简单的函数来从列表中取出任何奇数,并返回一个只有偶数的列表.

def purify(numbers):
for i in numbers:
    if i%2!=0:
       numbers.remove(i)
return numbers    

print purify([4,5,5,4])
Run Code Online (Sandbox Code Playgroud)

当在上面应用时

它返回:[4,5,4]为什么第二个5被删除,因为它也证明了if?

我不太关注问题的不同方法,而是更多地了解为什么会发生这种情况.

谢谢,对不起,如果这是愚蠢的......乔

NPE*_*NPE 15

删除项目时,后面的项目会向左移动一个位置.这导致循环跳过一些项目.

顺便说一下,编写代码的更惯用的方法是

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


Bur*_*lid 8

具有讽刺意味的是,我没有看到提到的一种选择是filter

>>> filter(lambda x: not x % 2, [4,5,5,4])
[4, 4]
Run Code Online (Sandbox Code Playgroud)