我有一个非常奇怪的错误,我无法看到出错的地方。我想循环一个对象列表
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原理吗? 谢谢 卡尔
答案 0 :(得分:4)
不要修改在循环内迭代的容器。由于pop操作,容器会发生变化,因此迭代它会失败(跳过一个元素)。
如果你只想迭代收集并在最后销毁它 - 从它弹出直到它不是空的
EXAMPLE:
insert into Event
(name, ratingOutOf10, numberOfRatings, category, venue, fromDateTime, description, pricesList, termsAndConditions)
VALUES
('Disco', '3.4', '45', 'Adventure; Music;', 'Bombay Hall', strftime('%s','2016-01-27 20:30:50'), 'A dance party', 'Normal: Rs. 50', 'Items lost will not be the concern of the venue host.');
insert into Event
(name, ratingOutOf10, numberOfRatings, category, venue, fromDateTime, description, pricesList, termsAndConditions)
VALUES
('Trekking', '4.1', '100', 'Outdoors;', 'Sanjay Gandhi National Park', strftime('%s','2016-01-27 08:30'), 'A trek through the wilderness', 'Normal: Rs. 0', 'You must be 18 or more and sign a release.');
select * from event where fromDateTime > strftime('%s','2016-01-27 20:30:49');
给出
a = range(10)
while len(a):
print a.pop(0)
正如所料。
因此在你的情况下
0
1
2
3
4
5
6
7
8
9