Проверка, все ли элементы в списке уникальны - PullRequest
85 голосов
/ 11 марта 2011

Каков наилучший способ (лучше, чем обычный способ) проверки того, являются ли все элементы в списке уникальными?

Мой текущий подход с использованием Counter:

>>> x = [1, 1, 1, 2, 3, 4, 5, 6, 2]
>>> counter = Counter(x)
>>> for values in counter.itervalues():
        if values > 1: 
            # do something

Могу ли я сделать лучше?

Ответы [ 13 ]

1 голос
/ 08 ноября 2012

Как насчет этого

def is_unique(lst):
    if not lst:
        return True
    else:
        return Counter(lst).most_common(1)[0][1]==1
0 голосов
/ 04 ноября 2015

Для начинающих:

def AllDifferent(s):
    for i in range(len(s)):
        for i2 in range(len(s)):
            if i != i2:
                if s[i] == s[i2]:
                    return False
    return True
0 голосов
/ 11 марта 2011

Вы можете использовать синтаксис Яна (len (x)> len (set (x))), но вместо set (x) определите функцию:

 def f5(seq, idfun=None): 
    # order preserving
    if idfun is None:
        def idfun(x): return x
    seen = {}
    result = []
    for item in seq:
        marker = idfun(item)
        # in old Python versions:
        # if seen.has_key(marker)
        # but in new ones:
        if marker in seen: continue
        seen[marker] = 1
        result.append(item)
    return result

и сделайте len (x)> len (f5 (x)).Это будет быстро и также сохранит порядок.

Код, взятый из: http://www.peterbe.com/plog/uniqifiers-benchmark

...