Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除元素会弄乱索引_Python_List - Fatal编程技术网

Python 删除元素会弄乱索引

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时递增 在其他语言中,我想解决这个问题的

我有一个关于列表的简单问题

假设我要从列表中删除所有“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时递增

在其他语言中,我想解决这个问题的一种方法是从列表的末尾向后迭代

但是,遍历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的序列项。