【发布时间】:2016-03-24 21:41:46
【问题描述】:
我正在尝试通过删除列表中满足条件的元素来进行简单的列表过滤。
>>> a = ["a" , "e" , "i" , "o" , "u"]
>>> for elem in a:
... a.remove(elem)
在这种情况下,我没有过滤,我正在尝试删除所有元素。但是,如果我 print a 这就是我所看到的:
>>> print a
["e" , "o"]
无法通过这种方式删除数组中的所有元素。 Python 删除元素,重新分配索引,然后增加它。因此,Python 在每次迭代中都会跳过一个元素。如果它不适用于最简单的情况,我该如何正确实现列表过滤?
>>> numbers = [100 , 102 , 103 , 105 , 107, 108, 110, 120]
>>> for elem in numbers:
... if elem % 2 == 0:
... numbers.remove(elem)
...
>>> numbers
[102, 103, 105, 107, 110]
在这种情况下,更自然的(在我看来)列表过滤的实现不起作用......你如何控制这种操作??
谢谢!
【问题讨论】:
-
要说明为什么从当前迭代的序列中删除元素是不好的,请参阅我的回答 here