Risposte:
Risposta di base:
mylist = ["b", "C", "A"]
mylist.sort()
Questo modifica il tuo elenco originale (cioè ordina sul posto). Per ottenere una copia ordinata dell'elenco, senza modificare l'originale, utilizzare la sorted()funzione:
for x in sorted(mylist):
print x
Tuttavia, gli esempi sopra riportati sono un po 'ingenui, poiché non tengono conto delle impostazioni locali ed eseguono un ordinamento sensibile al maiuscolo / minuscolo. È possibile sfruttare il parametro facoltativo keyper specificare l'ordinamento personalizzato (l'alternativa, utilizzando cmp, è una soluzione obsoleta, poiché deve essere valutata più volte - keyviene calcolata una sola volta per elemento).
Quindi, per ordinare in base alle cmp_to_keyimpostazioni internazionali correnti, tenendo conto delle regole specifiche della lingua ( è una funzione di supporto da functools):
sorted(mylist, key=cmp_to_key(locale.strcoll))
Infine, se necessario, è possibile specificare un'impostazione internazionale personalizzata per l'ordinamento:
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']
Ultima nota: vedrai esempi di ordinamento senza distinzione tra maiuscole e minuscole che utilizzano il lower()metodo: quelli non sono corretti, perché funzionano solo per il sottoinsieme di caratteri ASCII. Quei due sono errati per qualsiasi dato non inglese:
# 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)è più veloce.
[1, 2, 3].sort(). Man mano che sort()ordina l'elenco sul posto (cioè cambia direttamente l'elenco), non restituisce l'elenco ordinato e in realtà non restituisce nulla, quindi viene stampata la dichiarazione di stampa None. Se hai salvato il tuo elenco in una variabile, ad esempio x, chiamato x.sort(), quindi print(x), vedresti l'elenco ordinato.
Vale anche la pena notare la sorted()funzione:
for x in sorted(list):
print x
Ciò restituisce una nuova versione ordinata di un elenco senza modificare l'elenco originale.
Il modo corretto di ordinare le stringhe è:
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']
L'esempio precedente mylist.sort(key=lambda x: x.lower())funzionerà bene per contesti solo ASCII.
Utilizzare la funzione sort () in Python3
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
Ma come gestisce le regole di ordinamento specifiche della lingua? Tiene conto delle impostazioni locali?
No, list.sort()è una funzione di ordinamento generica. Se si desidera ordinare in base alle regole Unicode, è necessario definire una funzione chiave di ordinamento personalizzata. Puoi provare a usare il modulo pyuca , ma non so quanto sia completo.
Vecchia domanda, ma se si desidera eseguire un ordinamento in base alle impostazioni locali senza impostazione, locale.LC_ALL è possibile farlo utilizzando la libreria PyICU come suggerito da questa risposta :
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)
Quindi chiama con es:
new_list = sorted_strings(list_of_strings, "de_DE.utf8")
Questo ha funzionato per me senza installare alcuna locale o modificare altre impostazioni di sistema.
(Questo è già stato suggerito in un commento sopra , ma volevo dargli maggiore risalto, perché all'inizio mi mancava da solo.)
O forse:
names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
È semplice: 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'
score = score.split (',') per x in ordinato (punteggi): stampa (x)
localeed è i metodi di fascicolazione delle stringhe per ordinare in modo naturale in base alle impostazioni internazionali correnti.