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)))