我有一个非常奇怪的错误,我看不出哪里出错了。我想遍历对象列表
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原则吗?谢谢卡尔
不要修改您在循环内迭代的容器。由于弹出操作,您的容器会发生变化,因此 - 迭代失败(跳过一个元素)。
如果您只想迭代集合并在最后销毁它 - 从它弹出直到它不为空
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)