2011-07-21 18 views

Respuesta

9

Si quiere decir que tenga una lista y desea saber si hay valores duplicados, a continuación, hacer un juego de la lista y ver si es más corta que la lista:

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

esto no será Sin embargo, le digo cuál es el valor duplicado.

+0

Perfecto, gracias! Sin embargo, una cosa más, si hay un valor duplicado dentro de la lista, ¿por qué la longitud de la lista cambia cuando se convierte a un conjunto? ¿Los juegos eliminan automáticamente los duplicados? Gracias – Taimur

+0

@Taimur: Exactamente, los conjuntos contienen solo elementos únicos. – delnan

1

Puede convertir la lista a un conjunto y comprobar su longitud.

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

Si sus acciones necesitan saber el número o la cantidad de veces que se repite el número por encima de su lista de entrada y luego groupby es una buena opción.

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

El primer número es el elemento y el segundo el número de repeticiones. groupby trabaja sobre una lista ordenada así que asegúrese de ordenar su lista de entrada, por ejemplo.

>>> 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 tiene Python 2.7+ puede usar 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

Esta es probablemente la mejor solución si necesita saber * cuál * número aparece más de una vez. –

+0

nice No sabía esto. Mejor que mi respuesta, de hecho (+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 quieres ver lo que los valores no son los únicos que puede obtener una lista de esos valores por

>>> filter(lambda item: item_occurence[item] > 1, item_occurence) 
[1, 4] 
Cuestiones relacionadas