Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Dada una lista de cadenas, quiero ordenarla alfabéticamente y eliminar duplicados. Sé que puedo hacer esto:

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 lograrlo 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 solución rápida pero más opaca.

¿Fue útil?

Solución

Una lista se puede ordenar y deduplicar utilizando las funciones integradas:

myList = sorted(set(myList))
  • set es una función integrada para Python < !> gt; = 2.3
  • sorted es una función integrada para Python > = 2.4

Otros consejos

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

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

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 (zip y repetir) puedes usar un generador (funciona en 2 & amp; 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 está 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 not in para cada elemento de la lista de entrada.

> 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 atravesar las teclas de un dict en orden ordenado:

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

y también porque tuple están ordenados por el primer miembro de la tupla, puede hacer lo mismo con 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     
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top