Re: [Python-es] ¿Forma óptima de eliminar duplicados?

Medardo Rodriguez med.swl en gmail.com
Mar Jul 29 23:02:52 CEST 2008


2008/7/29 Arnau Sanchez <pyarnau en gmail.com>:
> def uniq(iterable):
>    seen = set()
>    for x in iterable:
>        if x not in seen:
>            seen.add(x)
>            yield x

Si usan Python anterior a la 2.5, recuerden que los conjuntos son
implementados con diccionarios.

Les propongo la siguiente variante:

class Last(object):
      def __init__(self, data = None):
            self.data = data
      def check(self, data):
            res = (self.data == data)
            if not res:
                  self.data = data
            return res

def unique(source):
      last = Last()
      source.sort()
      return [a for a in source if not last.check(a)]

Claro que esta variante puede convertirse en un iterator fácilmente.

Las clase Last podría ser una herramienta a guardar para usarla que
muchos casos.
El «sort» puede tener el inconveniente de que rompe el orden inicial,
pero solo lo pongo para que sirva como idea adicional.

Saludos


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