What is the best way (best as in the conventional way) of checking whether all elements in a list are unique?
My current approach using a
>>> x = [1, 1, 1, 2, 3, 4, 5, 6, 2] >>> counter = Counter(x) >>> for values in counter.itervalues(): if values > 1: # do something
Can I do better?
Not the most efficient, but straight forward and concise:
if len(x) > len(set(x)): pass # do something
Probably won't make much of a difference for short lists.
Here is a two-liner that will also do early exit:
>>> def allUnique(x): ... seen = set() ... return not any(i in seen or seen.add(i) for i in x) ... >>> allUnique("ABCDEF") True >>> allUnique("ABACDEF") False
If the elements of x aren't hashable, then you'll have to resort to using a list for
>>> def allUnique(x): ... seen = list() ... return not any(i in seen or seen.append(i) for i in x) ... >>> allUnique([list("ABC"), list("DEF")]) True >>> allUnique([list("ABC"), list("DEF"), list("ABC")]) False