Mar*_*n08 7 python iterator list
我遍历一个列表并删除满足我条件的元素.但是,为什么这不起作用,如下所述?谢谢.
>>> 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]
Run Code Online (Sandbox Code Playgroud)
小智 10
在迭代时你无法改变某些东西.结果很奇怪,反直觉,几乎不是你想要的.实际上,许多集合明确地禁止这样做(例如set和dicts).
相反,迭代复制(for e in a[:]: ...)或,而不是修改现有列表,过滤它以获得包含所需项目的新列表([e for e in a if ...]).请注意,在许多情况下,您不必再次迭代进行过滤,只需将过滤与数据生成合并即可.
你为什么不在列表理解中最初这样做?例如
[i for i in range(4) if i <= 1 or i >= 4]
Run Code Online (Sandbox Code Playgroud)
您也可以使用它从现有列表构建新列表,例如
[x for x in a if x <= 1 or x >= 4]
Run Code Online (Sandbox Code Playgroud)