¿Forma óptima de eliminar duplicados?
Arnau Sanchez
pyarnau en gmail.com
Mar Jul 29 22:09:13 CEST 2008
Chema Cortes escribió:
> Si quieres mantener el orden hay un truco (aunque no recomiendo utilizarlo):
>
> [i for i in lista if i not in locals()["_[1]"]]
>
> Es mejor emplear otras cosas como
>
> def nodup(s,i):
> return s if i in s else s+[i]
>
> reduce(nodup, lista, [] )
Ahí va otra solución que mantiene el orden, pero usando un generador, puede
resultar útil en según qué circunstancias:
def uniq(iterable):
seen = set()
for x in iterable:
if x not in seen:
seen.add(x)
yield x
> Lástima que "reduce" vaya a desaparecer de python 3000.
Bueno, desaparece como built-in, pero sigue disponible en el módulo "functools".
Sabiendo el poco aprecio que GvR le tiene, me parece un compromiso aceptable.
$ python3k
Python 3.0a5 (r30a5:62856, Jun 6 2008, 22:17:19)
[GCC 4.2.4 (Debian 4.2.4-1)] on linux2
>>> import functools
>>> functools.reduce(lambda acc, x: acc + x, [1,2,3])
6
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es