为什么g.append(l.pop())返回l的后半部分而l只有前半部分
在我写一个程序的时候,发现了代码里一个奇怪的行为。以下是我看到的情况。
>>> l = [1,2,3,4,5,6,7,8]
>>> g = []
>>> for i in l:
... g.append(l.pop())
...
>>> l
[1, 2, 3, 4]
>>> g
[8, 7, 6, 5]
>>>
这个列表 g
本来应该包含列表 l
的所有元素!可是为什么它只考虑了一半的列表呢?
特别说明: 我并不是在尝试复制一个列表或反转一个列表。这是我在做其他事情时发现的一个问题。
相关文章:
- 暂无相关问题
1 个回答
11
通常情况下,你不应该这样做!
在循环中改变你正在遍历的对象是不好的做法!
解释:
如你所见,l.pop()
总是取出 l
中的最后一个项目。
而 g.append()
则是把取出的项目添加到 g
的末尾。
经过四次循环后,l
就没有任何项目了。
第一次运行:
i = v
l = [1,2,3,4,5,6,7]
g = [8]
第二次运行:
i = v
l = [1,2,3,4,5,6]
g = [8,7]
第三次运行:
i = v
l = [1,2,3,4,5]
g = [8,7,6]
第四次运行:
i = v
l = [1,2,3,4]
g = [8,7,6,5]
现在我们已经到达 l
的末尾,所以停止循环。