118 votes

Vérifier si tous les éléments d'une liste sont uniques

Quel est le meilleur moyen (le meilleur comme de manière conventionnelle) de vérifier si tous les éléments d'une liste sont uniques?

Mon approche actuelle utilisant Counter est:

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

Puis-je faire mieux?

191voto

yan Points 13348

Pas le plus efficace, mais simple et concis:

 if len(x) > len(set(x)):
   pass # do something
 

Cela ne fera probablement pas une grande différence pour les listes restreintes.

104voto

Paul McGuire Points 24790

Voici un avion à deux lignes qui fera également une sortie anticipée:

 >>> 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
 

Si les éléments de x ne sont pas obligatoires, vous devrez utiliser une liste pour seen :

 >>> 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
 

22voto

6502 Points 42700

Une solution de sortie précoce pourrait être

 def unique_values(g):
    s = set()
    for x in g:
        if x in s: return False
        s.add(x)
    return True
 

Cependant, dans les cas mineurs ou si le départ anticipé n’est pas le cas le plus courant, je suppose que la méthode len(x) != len(set(x)) est la plus rapide.

13voto

Grzegorz Oledzki Points 10491

Pourquoi ne pas ajouter toutes les entrées à un ensemble et en vérifier la longueur?

 len(set(x)) == len(x)
 

8voto

junjanes Points 4858

Au lieu de set , vous pouvez utiliser un dict .

 len({}.fromkeys(x)) == len(x)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X