如何删除Python列表中所有出现的相同元素?

参见英文答案 > Remove all occurrences of a value from a list?                                    21个
如何从下面的列表中删除333的出现次数?

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]

我在Python 2.7命令行中输入了以下脚本

for num in a:
    if num == 333:
       a.remove(num)

但只删除了第一次出现的333

 >>> a
 [-1, 1, 66.25, 333, 1234.5]

如何删除所有相同元素的出现?
我希望能够指定我希望删除所有实例的元素,并使用相同的名称或其他名称获取新的列表

最佳答案
由于您询问如何删除元素,我会将列表重新指定为切片.

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> a[:] = [item for item in a if item != 333]

这将在内存中创建一个新的列表,通常是可以接受的,但如果你想避免这种情况而不调用remove,这将多次检查相同的项目.

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> for i in range(len(a) - 1, -1, -1):  # iterate over reversed indices's
>>>     if a[i] == 333:
>>>         del a[i]

这样做的好处是它首先删除了最后的项目(这在CPython中更快).

请注意,从Python中列表的开头 – 中间删除项目并不是那么理想.无论你使用哪种方法(del list [index]或list.remove),如果列表很大并且必须删除很多项,这意味着Python需要大量调整列表大小,在这种情况下我建议使用list-理解制作新名单.

转载注明原文:如何删除Python列表中所有出现的相同元素? - 代码日志