【问题标题】:for loop over list ignores second element? [duplicate]for 循环列表忽略第二个元素? [复制]
【发布时间】:2016-07-21 15:03:38
【问题描述】:

我有一个非常奇怪的错误,我看不出哪里出错了。我想遍历一个对象列表

objects =  [<object 1>, <object 2>, <object 3>, <object 4>, <Query_Category 5>, <object 6>] 

我做一个简单的

for i, object in enumerate(objects):
    print "delete ", object
    objects.pop(i)

输出是

delete  <Query_Category 1>
delete  <Query_Category 3>
delete  <Query_Category 4>
delete  <Query_Category 5>
delete  <Query_Category 6>

所以循环忽略了第二个元素?这个结果是可重现的,这意味着如果我再次运行它会导致相同的结果??? 这对您来说可能无法重现,因为我猜这是由我的代码中的一些奇怪的东西引起的???但我不知道要寻找什么? 我在这里缺少总和基本的python原理吗? 谢谢 卡尔

【问题讨论】:

  • 修改您正在迭代的对象几乎从来都不是一个好主意。你想用这个来完成什么?

标签: python


【解决方案1】:

请勿在循环内修改您正在迭代的容器。由于弹出操作,您的容器会发生变化,因此 - 迭代失败(跳过一个元素)。

如果您只想遍历集合并在最后销毁它 - 从它弹出直到它不为空

a = range(10)

while len(a):
  print a.pop(0)

给予

0
1
2
3
4
5
6
7
8
9

正如预期的那样。

在你的情况下

while len(objects):
    object = objects.pop(0)
    print "delete ", object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多