在列表长度中迭代时列出索引超出范围错误

时间:2013-05-01 21:21:31

标签: python list iteration

我有以下代码,其中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)

有什么想法吗?

3 个答案:

答案 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提供的列表理解。