我有以下代码,其中sortings_list包含2个项目,如
sortings_list = ['code', 'name']
for i in xrange(0, len(sortings_list)):
if sortings_list[i] == '-%s' % field:
sortings_list.pop(i)
有什么想法吗?
答案 0 :(得分:5)
您在迭代时从列表中删除项目,如果删除第一项,则第二项的索引更改。改为使用列表理解:
sortings_list = [elem for elem in sortings_list if not elem == '-%s' % field]
答案 1 :(得分:1)
你在删除它的第一个项目上调用pop(),现在列表只有一个元素。
然后你尝试迭代到第二个项目,它不再存在。
答案 2 :(得分:0)
你最好使用列表理解,因为索引很混乱。使用Python,您在大多数情况下不需要索引列表。话虽这么说,如果你仍然坚持使用你的解决方案:
for i in xrange(len(sortings_list) - 1, -1, -1):
if ...:
sortings_list.pop(i)
也就是说,从列表末尾开始并向后遍历。这样,所有索引仍然有效。同样,我强烈建议不要这样做。选择Martijn Pieters提供的列表理解。