开发者

Removing duplicate element from a list and the element itself

开发者 https://www.devze.com 2023-02-15 22:39 出处:网络
I know this question has been asked lots of times, but I am not asking how to remove duplicate elements from a list only, I want to remove the duplicated element as well.

I know this question has been asked lots of times, but I am not asking how to remove duplicate elements from a list only, I want to remove the duplicated element as well.

For example, if I have a list:

x = [1, 2, 5, 3, 4, 1, 5]
开发者_开发技巧

I want the list to be:

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

I can't use a set, since that will include 1 and 5.

Should I use a Counter? Is there a better way?


This should be done with a Counter object. It's trivial.

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

Output:

[2, 3, 4]


Maybe this way:

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

EDIT: This is not the best way in term of time complexity as you can see in the comment above, sorry my mistake.


Something more verbose and 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


How about

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

This has the advantage of being O(n) instead of O(n^2).

Edit. Indeed my bad, I must have been half asleep. Mahmoud's answer above is the correct one.

0

精彩评论

暂无评论...
验证码 换一张
取 消