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

Rah*_*hul 2 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]
>>> 
Run Code Online (Sandbox Code Playgroud)

该列表g应该具有列表中的所有元素l!但为什么只考虑一半的名单呢?

免责声明:我不是要复制列表或反转列表.这是我在处理其他事情时发现的.

Alt*_*yyr 11

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

说明:
正如您所看到的那样,l.pop()总是需要l
g.append()现在的最后一项将弹出的项目添加到结束g
后4次运行之后l没有任何项目.

第一次运行:

i =  v
l = [1,2,3,4,5,6,7]
g = [8]
Run Code Online (Sandbox Code Playgroud)

第二轮:

i =    v
l = [1,2,3,4,5,6]
g = [8,7]
Run Code Online (Sandbox Code Playgroud)

第三次运行:

i =      v
l = [1,2,3,4,5]
g = [8,7,6]
Run Code Online (Sandbox Code Playgroud)

第四次运行:

i =        v
l = [1,2,3,4]
g = [8,7,6,5]
Run Code Online (Sandbox Code Playgroud)

现在我们结束了l,我们停止了循环

  • 不,他们不是,4是最后一个因素,因为其余部分已经弹出 (2认同)
  • 是的,还有剩下的元素(前4个),但迭代器`i`(我用小`v'标记它)位于列表的末尾. (2认同)