2015-12-18 62 views
0

我试图通过删除符合条件的列表中的那些元素来进行简单列表筛选。循环遍历列表并删除符合某些条件的列表 - Python

>>> 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] 

在这种情况下,更自然的(在我看来)执行列表过滤不工作...你如何控制这种操作的?

谢谢!

+2

对于为何移除元素形成当前正在遍历序列的例证是坏看到我的答案[这里](http://stackoverflow.com/a/31704332/1318181) – IanAuld

回答

-4

只需使用内置功能filter()

>>> filter(lambda x: x % 2, numbers) 
[103, 105, 107] 
+6

'filter'在Python 3中返回一个生成器对象,而在Python 2中,这仍然会创建*新的*列表而不修改原始列表。另外,你的答案缺乏信息,主要是一个非常不鼓励的链接回答。根据你的声望来判断,你应该知道更好。 – poke

+0

@poke:Python 3比Python 2更少使用,所以如果少数用户需要将结果包装在额外的list()调用中,我并不介意太多。至于链接,它确实需要我多花一分钟来添加完整的示例。 –