如何在Python中从列表中删除所有重复元素?

5
我有一个类似这样的列表:-
[1,2,3,4,3,5,3,6,7,8]

我想从列表中完全删除重复元素(这里是:- 3),就像这样:

[1,2,4,5,6,7,8]

如何在Python中实现去除所有重复元素而不仅仅是第一个重复元素的出现?
4个回答

7
你可以使用 `collections` 中的 `Counter` 来统计元素出现的次数,并通过列表推导式选择仅出现一次的元素: ```html

你可以使用 collectionsCounter 来统计元素出现的次数,并使用列表推导式选择那些仅出现一次的元素:

```
from collections import Counter
a = [1,2,3,4,3,5,3,6,7,8]
[k for k, v in Counter(a).items() if v == 1]

(Counter 基本上返回一个字典,其中元素作为键存储,它们的计数作为值存储。)


1
这段代码应该可以工作。
#Finding duplicate
def dup(x):
    s = len(x)
    duplicate = []
    for i in range(s):
        k = i + 1
        for j in range(k, s):
            if x[i] == x[j] and x[i] not in duplicate:
                duplicate.append(x[i])
    return duplicate

#begining
list1 = [1, 2, 3, 4, 3, 5, 3, 6, 7, 8]
#Finding duplicate
dup_list = (dup(list1))
#removing duplicates from the list
final_list = list(set(list1) - set(dup_list))
print(final_list)

请注意,这是一种极其低效的解决方案。每个for循环和可能的not in duplicate检查都是O(n),总时间复杂度达到O(n^2)到O(n^3)——最优解只需要O(n)的时间复杂度,并且在空间使用上也不会更差。 - MisterMiyagi

0
使用集合。要消除所有重复的值,请使用以下代码:
a = [1,2,3,4,3,5,3,6,7,8]
print(a)
a = list(set(a))
print(a)

这将输出

[1,2,3,4,3,5,3,6,7,8]
[1,2,4,5,6,7,8]

4
不,这会保持3。 - fuenfundachtzig
将列表进行去重操作可以得到唯一的值。OP希望完全删除重复的条目。 - code11
哦,我看错了。我以为你想要所有的重复项都被删除。 - Dock
2
因为Google而进行下投票几乎不可辩解,即使因为在Stackoverflow上有重复的问题而进行下投票也不是很好的行为 - 将其关闭为重复项才是正确的方式。另外,你的代码不正确,并且没有产生你所声称的输出 - 我得到了 [1, 2, 3, 4, 5, 6, 7, 8],这与 set 的行为一致。-1 - JL Peyret

0
一个好的,高效的方法是使用pandas。
import pandas as pd
sample_list = [1,2,3,4,3,5,3,6,7,8]
unique_list = list(pd.Series(sample_list).drop_duplicates())

>> unique_list    
>> [1, 2, 3, 4, 5, 6, 7, 8]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接