for 循环列表忽略第二个元素?

car*_*arl 4 python

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

objects =  [<object 1>, <object 2>, <object 3>, <object 4>, <Query_Category 5>, <object 6>] 
Run Code Online (Sandbox Code Playgroud)

我做了一个简单的

for i, object in enumerate(objects):
    print "delete ", object
    objects.pop(i)
Run Code Online (Sandbox Code Playgroud)

输出是

delete  <Query_Category 1>
delete  <Query_Category 3>
delete  <Query_Category 4>
delete  <Query_Category 5>
delete  <Query_Category 6>
Run Code Online (Sandbox Code Playgroud)

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

lej*_*lot 5

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

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

a = range(10)

while len(a):
  print a.pop(0)
Run Code Online (Sandbox Code Playgroud)

0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

正如预期的那样。

因此在你的情况下

while len(objects):
    object = objects.pop(0)
    print "delete ", object
Run Code Online (Sandbox Code Playgroud)