Python 删除元素会弄乱索引
我有一个关于列表的简单问题 假设我要从列表中删除所有“a”:Python 删除元素会弄乱索引,python,list,Python,List,我有一个关于列表的简单问题 假设我要从列表中删除所有“a”: list = ['a', 'a', 'b', 'b', 'c', 'c'] for element in list: if element == 'a': list.remove('a') print list ==>结果: ['a', 'b', 'b', 'c', 'c', 'd', 'd'] 我知道这是因为,在我删除第一个“a”之后,列表索引 当所有元素向左按1时递增 在其他语言中,我想解决这个问题的
list = ['a', 'a', 'b', 'b', 'c', 'c']
for element in list:
if element == 'a':
list.remove('a')
print list
==>结果:
['a', 'b', 'b', 'c', 'c', 'd', 'd']
我知道这是因为,在我删除第一个“a”之后,列表索引
当所有元素向左按1时递增
在其他语言中,我想解决这个问题的一种方法是从列表的末尾向后迭代
但是,遍历reversedlist会返回相同的错误
有没有一种类似蟒蛇的方法来解决这个问题
谢谢您不应该在迭代列表时修改它 更好的方法是使用排除项的方法:
list1 = ['a', 'a', 'b', 'b', 'c', 'c']
list2 = [x for x in list1 if x != 'a']
注意:不要在Python中使用list作为变量名-它会屏蔽内置的list类型。更具Python风格的方法之一:
>>> filter(lambda x: x != 'a', ['a', 'a', 'b', 'b', 'c', 'c'])
['b', 'b', 'c', 'c']
您是正确的,当您在迭代列表时从列表中删除一个项目时,列表索引将不同步。其他两个现有答案暗示的是,你需要创建一个新的列表,并只复制你想要的项目 例如:
existing_list = ['a', 'a', 'b', 'c', 'd', 'e']
new_list = []
for element in existing_list:
if element != 'a':
new_list.append(element)
existing_list = new_list
print existing_list
输出:['b','c','d','e']Dup:Reverse iteration没有帮助,因为您正在使用remove,它从前面循环列表并删除它找到的第一个出现。除非你真的没有更好的选择,否则不要使用删除。请不要使用列表名作为变量。我很好奇。是什么让这个蟒蛇?我想,你的方式会更快,但一个错误的角色和调试这将驱使我喝酒。我对python是相当陌生的,我真的很好奇。我想是因为它使用了为这个确切目的定义的方法:返回那些functionitem为true的序列项。