Pregunta

¿Cuál es la mejor manera de crear una lista ordenada alfabéticamente en Python?

¿Fue útil?

Solución

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, utilice el 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.Puedes aprovechar el parámetro opcional. key para especificar un orden de clasificación personalizado (la alternativa, usando cmp, es una solución obsoleta, ya que debe evaluarse varias veces. key sólo 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 un configuración regional personalizada para clasificar:

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

Otros consejos

También vale la pena señalar el 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.

list.sort()

Es realmente así de simple :)

La forma correcta de ordenar cadenas es:

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'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']

# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']

El ejemplo anterior de mylist.sort(key=lambda x: x.lower()) funcionará bien para contextos solo ASCII.

Pero, ¿cómo maneja esto las reglas de clasificación específicas del idioma?¿Tiene en cuenta la localización?

No, list.sort() es una función de clasificación genérica.Si desea ordenar según las reglas Unicode, deberá definir una función de clave de clasificación personalizada.Puedes intentar usar el piuca módulo, pero no sé qué tan completo está.

Utilice la función sorted() en Python3

items = ["love", "like", "play", "cool", "my"]
sorted(items2)

Suponer s = "ZWzaAd"

Para ordenar por encima de la cadena, la solución simple estará por debajo de uno.

print ''.join(sorted(s))

O tal vez:

names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top