我使用的是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
循环浏览列表时不应修改列表。这就是结果不一致的原因。相反,您可以使用while循环并检查列表是否为空:
在第一种情况下,您在修改列表的同时对其进行迭代,这几乎肯定会给您带来意想不到的结果。你知道吗
在第二种情况下,您不是在更改的同一列表上迭代,因此结果是固定的迭代次数。你知道吗
如果要执行第一个循环并检查所有元素,
while
循环可能会更好。你知道吗另一种方法是复制列表并在副本上迭代:
要遵循的一个好的一般规则是,您不应该修改正在迭代的列表。这正是您应该得到的行为:您正在迭代的列表越来越小,因此循环中要迭代的项将越来越少。它不遍历原始列表,而是遍历当前列表。你知道吗
在第二个示例中,您对一个从不更改的列表进行迭代,因此您正好得到三次迭代。你知道吗
你可能想看看这个问题:Remove items from a list while iterating
相关问题 更多 >
编程相关推荐