[Python-es] Duplicados en una lista

Iñigo Serna inigoserna en gmail.com
Mar Oct 19 11:24:47 CEST 2010


Buenas,

2010/10/19 Carlos Herrera Polo <carlos.herrerapolo en gmail.com>:
> Estimados:
>
> Alguien conoce la forma de obtener los items unicos en una lista ?
> Eliminando los duplicados, es decir...
>
> Si mi lista tiene los elementos:
>
> A,A,B,B,B,C,D,D,E,E,E,E...
>
> Obtener una lista de unicamente:
>
> A,B,C,D,E...
>
> Imagino que debe existir una funcion (he visto cosas super practicas en python)


En la actualidad posiblemente lo mejor sea utilizar set, que según
creo recordar apareció en la versión 2.4

> l =[1,1,1,2,3,3,3,4,4,4]
> list(set(l))
[1, 2, 3, 4]
>

Si te vale la secuencia para seguir trabajando, elimina la parte de "list".
De todos modos es por lo general buena idea trabajar con secuencias en
vez de con listas si la lista original es bastante grande, debido a su
menor consumo de memoria.

Antes de que python incluyera set, la manera más habitual (y
generalmente también más rápida) de hacerlo era utilizando
diccionarios:

> l =[1,1,1,2,3,3,3,4,4,4]
> dict((k,1) for k in l).keys()
[1, 2, 3, 4]
>

Pero este método no garantiza el orden.
Si lo necesitas puedes hacerlo con: sorted(dict((k,1) for k in
l).keys()) pero el rendimiento se verá afectado si la lista es muy
grande. En ese caso te recomiendo el primer método mostrado en el
primer comentario en el link siguiente.


Tienes más variantes e ideas en:
http://code.activestate.com/recipes/52560-remove-duplicates-from-a-sequence/


Espero te sea de ayuda.
Un saludo,
Iñigo Serna


Más información sobre la lista de distribución Python-es