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

标签 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 的所有元素!但是为什么它只考虑了列表的一半呢?

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

最佳答案

您通常不应该这样做!
更改正在循环的 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 的末尾,我们停止循环

关于python - 为什么 g.append(l.pop()) 返回 l 的后半部分但 l 只有前半部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33806742/

相关文章:

python - 如何从Python列表中删除字符串引号

list - Prolog - 搜索元素列表,如果找到元素则打印列表

python-2.7 - 如何使用 PySpark 并行运行独立转换?

linux - 在 virtual_env 中使用 pyinstaller 时出现 win32com 错误

python - 如何根据条件选择 DataFrame 中的特定列

Python - 确保字符串转换为正确的 Float

python - 如何按权重对两个成对元素的列表进行排序?

html - 填充在我的 <ul> 上创建了奇怪的黑线

python - 在 Ubuntu 的 python3 上安装 NCurses

python - 如何检查 argv 是否引用 python2.7 中的现有文件?