ely*_*ely 1 python lambda list-comprehension side-effects
我知道在Python列表推导中使用副作用并不是一种好的做法.但我无法理解为什么会发生以下情况:
In [66]: tmp = [1,2,3,4,5]; [tmp.remove(elem) for elem in tmp]
Out[66]: [None, None, None]
In [67]: tmp
Out[67]: [2, 4]
Run Code Online (Sandbox Code Playgroud)
无论这是否是一种好的做法,列表理解的内部是否应该做一些可预测的事情?如果以上是可预测的,有人可以解释为什么只remove发生了三次操作,为什么偶数条目仍然存在?
这不是关于listcomps,而是关于从迭代的列表中删除:
>>> tmp = [1,2,3,4,5]
>>> for elem in tmp:
... tmp.remove(elem)
...
>>> tmp
[2, 4]
Run Code Online (Sandbox Code Playgroud)
它是这样的:
>>> tmp = [1,2,3,4,5]
>>> for elem in tmp:
... print elem, tmp
... tmp.remove(elem)
... print elem, tmp
...
1 [1, 2, 3, 4, 5]
1 [2, 3, 4, 5]
3 [2, 3, 4, 5]
3 [2, 4, 5]
5 [2, 4, 5]
5 [2, 4]
Run Code Online (Sandbox Code Playgroud)
首先,它正在查看第0个元素,并删除1.所以在下一次迭代中,它想要删除第一个元素,现在是3,等等.