2017-10-05 7 views
1

Je sais qu'il y a déjà beaucoup de questions sur ce sujet spécifique, mais je ne trouve pas de solution appropriée à mon problème.Nombre d'occurrences d'un élément dans la liste

J'ai l'entrée:

2, 20, 15, 16, 17, 3, 8, 10, 7 

Je veux voir s'il y a un nombre 'double' dans mon code. J'ai essayé de travailler avec ce code. Normalement, je devrais obtenir False, car il n'y a pas de nombres doubles dans la liste donnée. Cependant, je reçois True. Je suggère que est parce que le 2 apparaît également dans 20.

True 

Est-ce que quelqu'un sait comment éviter ce problème, de sorte que le « 2 » n'est pas compté deux fois?

Répondre

2

Vous pouvez utiliser collections.Counter qui fait exactement cela

>>> data = [2, 20, 15, 16, 17, 3, 8, 10, 7] 
>>> from collections import Counter 
>>> Counter(data) 
Counter({2: 1, 3: 1, 7: 1, 8: 1, 10: 1, 15: 1, 16: 1, 17: 1, 20: 1}) 
>>> 

Elle compte nombre d'occurences et renvoie un dict avec les touches indique l'élément et la valeur est le nombre de occurences.

Si vous avez juste besoin de savoir s'il y a des doublons ou non, quel que soit l'élément est le double, vous pouvez simplement utiliser Set sur votre liste et vérifiez len() après:

len(data) == len(set(data))

1

Vous peut comparer la longueur de l'entrée avec la longueur de l'ensemble des éléments uniques en entrée:

def has_repeated_elements(input): 
    """returns True if input has repeated elements, 
    False otherwise""" 
    return len(set(input)) != len(input) 

print(not has_repeated_elements(input))