为什么g.append(l.pop())返回l的后半部分,但l只有前半部分

时间:2015-11-19 14:32:40

标签: python list python-2.7

当我在一个程序上工作时,我在代码中看到了一个奇怪的行为。这就是我所看到的。

>>> 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 个答案:

答案 0 :(得分:11)

你通常不应该这样做!
更改你正在循环的Iterable并不好!

<强>解释
如您所见,l.pop()始终采用l的最后一项 g.append()现在将弹出的项目添加到g的末尾 4次运行后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的末尾,我们停止循环