如何在Python中安全地从列表中删除元素

我遍历一个列表并删除满足我条件的元素.但是,为什么这不起作用,如下所述?谢谢.

>>> a=[ i for i in range(4)]
>>> a
[0, 1, 2, 3]
>>> for e in a:
...     if (e > 1) and (e < 4):
...         a.remove(e)
... 
>>> a
[0, 1, 3]
>>> a=[ i for i in range(4)]
>>> for e in a:
...     if (e > -1) and (e < 3):
...         a.remove(e)
... 
>>> a
[1, 3]
最佳答案
在迭代时你无法改变某些东西.结果很奇怪,反直觉,几乎不是你想要的.实际上,许多集合明确地禁止这样做(例如集合和dicts).

相反,迭代一个副本(对于[:]:…中的e)或者,而不是修改现有列表,过滤它以获得包含所需项目的新列表([e表示if …] .]).请注意,在许多情况下,您不必再次迭代进行过滤,只需将过滤与数据生成合并即可.

转载注明原文:如何在Python中安全地从列表中删除元素 - 代码日志