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