2011-07-21 3 views

Répondre

9

Si vous vous voulez dire avez une liste et que vous voulez savoir s'il y a des valeurs en double, puis faites un ensemble de la liste et voir si elle est plus courte que la liste:

if len(set(my_list)) < len(my_list): 
    print "There's a dupe!" 

Ce ne sera pas vous dire ce que la valeur en double est, cependant.

+0

parfait, merci! Encore une chose cependant, s'il y a une valeur dupliquée dans la liste, pourquoi la longueur de la liste changera-t-elle lorsqu'elle sera convertie en ensemble? Les ensembles suppriment-ils automatiquement les doublons? Merci – Taimur

+0

@Taimur: Exactement, les ensembles ne contiennent que des éléments uniques. – delnan

1

Vous pouvez convertir la liste en ensemble et vérifier leurs longueurs.

>>> a = [1, 2, 3] 
>>> len(set(a)) == len(a) 
True 
>>> a = [1, 2, 3, 4, 4] 
>>> len(set(a)) == len(a) 
False 
2

Si vos actions doivent connaître le nombre ou combien de fois ce nombre se répète sur votre liste d'entrée puis groupby est un bon choix.

>>> from itertools import groupby 
>>> for x in groupby([1,1,2,2,2,3]): 
...  print x[0],len(list(x[1])) 
... 
1 2 
2 3 
3 1 

Le premier nombre est l'élément et le second le nombre de répétitions. groupby fonctionne sur une liste triée, donc assurez-vous de trier votre liste d'entrée, par exemple.

>>> for x in groupby(sorted([1,1,2,4,2,2,3])): 
...  print x[0],len(list(x[1])) 
... 
1 2 
2 3 
3 1 
4 1 
5

Si vous avez Python 2.7+, vous pouvez utiliser Counter.

>>> import collections 
>>> input = [1, 1, 3, 6, 4, 8, 8, 5, 6] 
>>> c = collections.Counter(input) 
>>> c 
Counter({1: 2, 6: 2, 8: 2, 3: 1, 4: 1, 5: 1}) 
>>> duplicates = [i for i in c if c[i] > 1] 
>>> duplicates 
[1, 6, 8] 
+0

C'est probablement la meilleure solution si vous avez besoin de savoir * quel * numéro apparaît plus d'une fois. –

+0

sympa Je ne connaissais pas celui-ci. Mieux que ma réponse en effet (+1) –

0
>>> arbitrary_list = [1, 1, 2, 3, 4, 4, 4] 
>>> item_occurence = dict([(item, list.count(item)) for item in arbitrary_list]) 
{1: 2, 2: 1, 3: 1, 4: 3} 

Si vous voulez voir quelles valeurs ne sont pas uniques, vous pouvez obtenir une liste de ces valeurs par

>>> filter(lambda item: item_occurence[item] > 1, item_occurence) 
[1, 4] 
Questions connexes