0

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

有任何想法吗 ?

4

3 回答 3

5

您在迭代时从列表中删除项目,如果您删除第一项,则第二项的索引会更改。改用列表推导:

sortings_list = [elem for elem in sortings_list if not elem == '-%s' % field]
于 2013-05-01T21:23:16.963 回答
1

您在删除它的第一个项目上调用 pop() ,现在列表只有一个元素。

然后您尝试迭代到不再存在的第二个项目。

于 2013-05-01T21:25:40.613 回答
0

你最好使用列表理解,因为索引很混乱。使用 Python,在大多数情况下,您不需要为列表编制索引。话虽如此,如果您仍然坚持使用您的解决方案:

for i in xrange(len(sortings_list) - 1, -1, -1):
    if ...:
        sortings_list.pop(i)

也就是说,您从列表的末尾开始并向后遍历。这样,所有索引仍然有效。同样,我强烈建议不要以这种方式做事。使用 Martijn Pieters 提供的列表理解。

于 2013-05-01T21:36:28.743 回答