【问题标题】:Loop over a list and remove those who meet certain condition - Python [duplicate]遍历列表并删除满足特定条件的人-Python [重复]
【发布时间】: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

标签: python loops filtering


【解决方案1】:

只需使用内置函数filter()

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

【讨论】:

  • filter 在 Python 3 中返回一个生成器对象,而在 Python 2 中,这仍然会在不修改原始列表的情况下创建 一个新的 列表。此外,您的答案缺乏信息,主要是仅链接的答案,非常不鼓励。从你的声望来看,你真的应该知道得更多。
  • @poke:Python 3 不如 Python 2 常用,所以如果少数用户需要将结果包装在额外的 list() 调用中,我并不介意。至于仅链接,我确实花了额外的时间来添加一个完整的示例。
猜你喜欢
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多