我知道这个问题已被多次询问,但我不是问如何从列表中删除重复的元素,我也想删除重复的元素。
例如,如果我有一个列表:
x = [1, 2, 5, 3, 4, 1, 5]
我希望列表为:
x = [2, 3, 4] # removed 1 and 5 since they were repeated
我无法使用set
,因为其中包含1
和5
。
我应该使用Counter
吗?还有更好的方法吗?
答案 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