python - array - ¿Cómo ordenar una lista de cuerdas?
sorted python 3 (8)
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()))
¿Cuál es la mejor manera de crear una lista ordenada alfabéticamente en Python?
Pero, ¿cómo maneja esto las reglas de clasificación específicas del idioma? ¿Tiene en cuenta la configuración regional?
No, list.sort()
es una función de clasificación genérica. Si desea clasificar de acuerdo con las reglas de Unicode, deberá definir una función de clave de clasificación personalizada. Puedes intentar usar el módulo pyuca , pero no sé cuán completo es.
La forma correcta de ordenar las 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 de solo ASCII.
Por favor use la función ordenada () en Python3
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
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 función sorted()
:
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 la key
parámetro opcional para especificar un orden de clasificación personalizado (la alternativa, usar cmp
, es una solución obsoleta, ya que debe evaluarse varias veces: la key
solo se calcula una vez por elemento).
Por lo tanto, para clasificar de acuerdo con 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 la clasificación:
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 ordenación que no distingue entre mayúsculas y minúsculas que utilizan el método lower()
; son incorrectos, ya que solo funcionan para el subconjunto de caracteres ASCII. Esos dos están equivocados para cualquier dato no 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)
Supongamos que s = "ZWzaAd"
Para ordenar por encima de la cadena, la solución simple estará debajo de una.
print ''''.join(sorted(s))
También vale la pena señalar la función sorted()
:
for x in sorted(list):
print x
Esto devuelve una nueva versión ordenada de una lista sin cambiar la lista original.
list.sort()
Es realmente así de simple :)