Uso groupby:
>>> from itertools import groupby
>>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
>>> [k for k, _ in groupby(sorted(a, key=lambda x: a.index(x)))]
[1, 2, 3, 5, 9, 6, 8, 7]
dejar de lado el argumento clave si no se preocupan por la que ordenar el valor apareció por primera vez en la lista original, por ejemplo,
>>> [k for k, _ in groupby(sorted(a))]
[1, 2, 3, 5, 6, 7, 8, 9]
Puede hacer algunas cosas interesantes con groupby
. Para identificar los elementos que aparecen varias veces:
>>> [k for k, v in groupby(sorted(a)) if len(list(v)) > 1]
[2, 3, 5, 8]
O para construir un diccionario de frecuencia:
>>> {k: len(list(v)) for k, v in groupby(sorted(a))}
{1: 1, 2: 3, 3: 4, 5: 4, 6: 1, 7: 1, 8: 2, 9: 1}
Hay algunas funciones muy útiles en el módulo itertools: chain
, tee
y product
para nombrar unos pocos !
Porque 'b' está vacío en el momento en que ejecuta' si el elemento no está en b'. La lista de comprensión se realiza en la memoria y el resultado se asigna a 'b' al final. –
posible duplicado de [Algoritmo - ¿Cómo eliminar elementos duplicados en una lista de manera eficiente?] (Http://stackoverflow.com/questions/1801459/algorithm-how-to-delete-duplicate-elements-in-a-list-efficiently) –
Eso significa que la comprensión de la lista no funciona como un bucle? – Alinwndrld