Respuestas:
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, ya que no tienen en cuenta la configuración regional y realizan una clasificación sensible a 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 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 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 ordenación sin distinción entre mayúsculas y minúsculas que utilizan el lower()
método; estos son incorrectos, porque funcionan solo para el subconjunto de caracteres ASCII. Esos dos están equivocados para cualquier información 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)
mylist.sort(key=str.lower)
es más rápido.
[1, 2, 3].sort()
. A medida que sort()
ordena la lista en su lugar (es decir, cambia la lista directamente), no devuelve la lista ordenada y, en realidad, no devuelve nada, por lo que se imprime la declaración de impresión None
. Si guardó su lista en una variable, digamos x
, llamada x.sort()
, print(x)
verá la lista ordenada.
También vale la pena señalar la sorted()
función:
for x in sorted(list):
print x
Esto devuelve una nueva versión ordenada de una lista sin cambiar la lista original.
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.
Utilice la función sorted () en Python3
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
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 ordenar 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é qué tan completo está.
Antigua pregunta, pero si desea realizar una ordenación local sin configuración locale.LC_ALL
, puede hacerlo utilizando la biblioteca PyICU como sugiere esta respuesta :
import icu # PyICU
def sorted_strings(strings, locale=None):
if locale is None:
return sorted(strings)
collator = icu.Collator.createInstance(icu.Locale(locale))
return sorted(strings, key=collator.getSortKey)
Luego llame con, por ejemplo:
new_list = sorted_strings(list_of_strings, "de_DE.utf8")
Esto funcionó para mí sin instalar ninguna configuración regional o cambiar otras configuraciones del sistema.
(Esto ya se sugirió en un comentario anterior , pero quería darle más importancia, porque al principio lo extrañé).
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()))
Es simple: https://trinket.io/library/trinkets/5db81676e4
scores = '54 - Alice,35 - Bob,27 - Carol,27 - Chuck,05 - Craig,30 - Dan,27 - Erin,77 - Eve,14 - Fay,20 - Frank,48 - Grace,61 - Heidi,03 - Judy,28 - Mallory,05 - Olivia,44 - Oscar,34 - Peggy,30 - Sybil,82 - Trent,75 - Trudy,92 - Victor,37 - Walter'
puntuaciones = puntuaciones.split (',') para x en ordenado (puntuaciones): imprimir (x)
locale
y sus métodos de clasificación de cadenas para ordenar de forma natural de acuerdo con la configuración regional actual.