values from different python list sorting unique

from - ¿Cómo eliminar duplicados de la lista de Python y mantener el orden?



unique python pandas (6)

Esta pregunta ya tiene una respuesta aquí:

Dada una lista de cadenas, quiero ordenarlas alfabéticamente y eliminar duplicados. Sé que puedo hacerlo:

from sets import Set [...] myHash = Set(myList)

pero no sé cómo recuperar los miembros de la lista del hash en orden alfabético.

No estoy casado con el hash, por lo que cualquier forma de lograr esto funcionará. Además, el rendimiento no es un problema, por lo que preferiría una solución que se exprese en código claramente a una rápida pero más opaca.


> pero no sé cómo recuperar los miembros de la lista del hash en orden alfabético.

No es realmente su pregunta principal, pero para referencia futura, la respuesta de Rod usando sorted puede usarse para recorrer las claves de un dict en orden ordenado:

for key in sorted(my_dict.keys()): print key, my_dict[key] ...

y también porque las tuple están ordenadas por el primer miembro de la tupla, puede hacer lo mismo con los items :

for key, val in sorted(my_dict.items()): print key, val ...


Para los datos de cadena

output = [] def uniq(input): if input not in output: output.append(input) print output


Si desea mantener el orden de la lista original, simplemente use OrderedDict con None como valores.

En Python2:

from collections import OrderedDict from itertools import izip, repeat unique_list = list(OrderedDict(izip(my_list, repeat(None))))

En Python3 es aún más simple:

from collections import OrderedDict from itertools import repeat unique_list = list(OrderedDict(zip(my_list, repeat(None))))

Si no te gustan los iteradores (comprimir y repetir), puedes usar un generador (funciona tanto en 2 como en 3):

from collections import OrderedDict unique_list = list(OrderedDict((element, None) for element in my_list))


Si lo que buscas es claridad, en lugar de velocidad, creo que esto es muy claro:

def sortAndUniq(input): output = [] for x in input: if x not in output: output.append(x) output.sort() return output

Sin embargo, es O (n ^ 2), con el uso repetido de no en cada elemento de la lista de entrada.


Si su entrada ya está ordenada, entonces puede haber una forma más simple de hacerlo:

from operator import itemgetter from itertools import groupby unique_list = list(map(itemgetter(0), groupby(yourList)))


Una lista puede ser ordenada y desduplicada usando funciones incorporadas:

myList = sorted(set(myList))

  • set es una función incorporada para Python> = 2.3
  • sorted es una función incorporada para Python> = 2.4