为什么我从python中的pop()函数得到不同的输出

2024-03-29 07:45:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.7。我试图用pop函数模拟从列表中弹出元素。但我得到了一个不一致的结果。你知道吗

使用变量列表编码

list_pop = [1,2,3]
for x in list_pop:
    print list_pop
    y = list_pop.pop(0)
    print y

结果:

[1, 2, 3]
1
[2, 3]
2

不使用变量保存列表的代码

list_pop = [1,2,3]
for x in [1,2,3]:
    print list_pop
    y = list_pop.pop(0)
    print y

[1, 2, 3]
1
[2, 3]
2
[3]
3
  • 我尝试过从一个列表中弹出索引0,其中有一个元素正在工作。我想知道为什么我的第一个代码在数字2之后停止打印,但是当我打印列表时,它给出了[3]第一个代码仍然应该遍历它并打印3。我希望两个代码的结果相同。我错过了什么?你知道吗

Tags: 函数代码in元素编码列表for数字
1条回答
网友
1楼 · 发布于 2024-03-29 07:45:24

循环浏览列表时不应修改列表。这就是结果不一致的原因。相反,您可以使用while循环并检查列表是否为空:

while list_pop:
    print list_pop
    y = list_pop.pop(0)
    print y
网友
2楼 · 发布于 2024-03-29 07:45:24

在第一种情况下,您在修改列表的同时对其进行迭代,这几乎肯定会给您带来意想不到的结果。你知道吗

在第二种情况下,您不是在更改的同一列表上迭代,因此结果是固定的迭代次数。你知道吗

如果要执行第一个循环并检查所有元素,while循环可能会更好。你知道吗

while not len(list_pop) == 0:
    print list_pop
    y = list_pop.pop(0)
    print y

另一种方法是复制列表并在副本上迭代:

for x in list_pop[:]:
    print list_pop
    y = list_pop.pop(0)
    print y
网友
3楼 · 发布于 2024-03-29 07:45:24

要遵循的一个好的一般规则是,您不应该修改正在迭代的列表。这正是您应该得到的行为:您正在迭代的列表越来越小,因此循环中要迭代的项将越来越少。它不遍历原始列表,而是遍历当前列表。你知道吗

在第二个示例中,您对一个从不更改的列表进行迭代,因此您正好得到三次迭代。你知道吗

你可能想看看这个问题:Remove items from a list while iterating

相关问题 更多 >