How do I check if there are duplicates in a flat list? How do I check if there are duplicates in a flat list? python python

How do I check if there are duplicates in a flat list?


Use set() to remove duplicates if all values are hashable:

>>> your_list = ['one', 'two', 'one']>>> len(your_list) != len(set(your_list))True


Recommended for short lists only:

any(thelist.count(x) > 1 for x in thelist)

Do not use on a long list -- it can take time proportional to the square of the number of items in the list!

For longer lists with hashable items (strings, numbers, &c):

def anydup(thelist):  seen = set()  for x in thelist:    if x in seen: return True    seen.add(x)  return False

If your items are not hashable (sublists, dicts, etc) it gets hairier, though it may still be possible to get O(N logN) if they're at least comparable. But you need to know or test the characteristics of the items (hashable or not, comparable or not) to get the best performance you can -- O(N) for hashables, O(N log N) for non-hashable comparables, otherwise it's down to O(N squared) and there's nothing one can do about it:-(.


This is old, but the answers here led me to a slightly different solution. If you are up for abusing comprehensions, you can get short-circuiting this way.

xs = [1, 2, 1]s = set()any(x in s or s.add(x) for x in xs)# You can use a similar approach to actually retrieve the duplicates.s = set()duplicates = set(x for x in xs if x in s or s.add(x))