从列表中删除重复元素和元素本身

时间:2011-03-09 12:36:42

标签: python list unique

我知道这个问题已被多次询问,但我不是问如何从列表中删除重复的元素,我也想删除重复的元素。

例如,如果我有一个列表:

x = [1, 2, 5, 3, 4, 1, 5]

我希望列表为:

x = [2, 3, 4] # removed 1 and 5 since they were repeated

我无法使用set,因为其中包含15

我应该使用Counter吗?还有更好的方法吗?

4 个答案:

答案 0 :(得分:10)

这应该使用Counter对象来完成。这很简单。

from collections import Counter
x = [k for k, v in Counter([1, 2, 5, 3, 4, 1, 5]).iteritems() if v == 1]
print x

输出:

[2, 3, 4]

答案 1 :(得分:4)

也许这样:

[_ for _ in x if x.count(_) == 1]

编辑:这不是时间复杂度方面的最佳方式,您可以在上面的评论中看到,对不起我的错误。

答案 2 :(得分:0)

怎么样

duplicates = set(x)
x = [elem for elem in x if elem not in duplicates]

这具有O(n)而不是O(n ^ 2)的优点。

编辑。确实是我的坏,我一定是半睡半醒。马哈茂德的答案是正确的。

答案 3 :(得分:0)

更冗长的东西和O(n):

x = [1, 2, 2, 3, 4]

def counts_fold(acc, x):
    acc[x] = acc[x]+1 if x in acc else 1
    return acc

counts = reduce(counts_fold, x, {})

y = [i for i in x if counts[i] == 1]

print y