¿Cómo ordenar una lista de cadenas?
¿Cuál es la mejor manera de crear una lista ordenada alfabéticamente en Python?
Respuesta básica:
mylist = ["b", "C", "A"]
mylist.sort()
Esto modifica su lista original (es decir, ordena en el lugar). Para obtener una copia ordenada de la lista, sin cambiar el original, use la sorted()
función:
for x in sorted(mylist):
print x
Sin embargo, los ejemplos anteriores son un poco ingenuos, porque no tienen en cuenta la configuración regional y realizan una clasificación que distingue entre mayúsculas y minúsculas. Puede aprovechar el parámetro opcional key
para especificar un orden de clasificación personalizado (la alternativa, usar cmp
, es una solución obsoleta, ya que debe evaluarse varias veces; key
solo se calcula una vez por elemento).
Entonces, para ordenar según la configuración regional actual, teniendo en cuenta las reglas específicas del idioma ( cmp_to_key
es una función auxiliar de functools):
sorted(mylist, key=cmp_to_key(locale.strcoll))
Y finalmente, si lo necesita, puede especificar una configuración regional personalizada para ordenar:
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']
Última nota: verá ejemplos de clasificación que no distingue entre mayúsculas y minúsculas que utilizan el lower()
método; son incorrectos porque solo funcionan para el subconjunto de caracteres ASCII. Esos dos son incorrectos para cualquier dato que no esté en inglés:
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
También cabe destacar la sorted()
función:
for x in sorted(list):
print x
Esto devuelve una versión nueva y ordenada de una lista sin cambiar la lista original.