Domanda

Qual è il modo migliore per creare un elenco ordinato alfabeticamente in Python?

È stato utile?

Soluzione

Risposta di base:

mylist = ["b", "C", "A"]
mylist.sort()

Questo modifica il tuo elenco originale (ad es.ordina sul posto).Per ottenere una copia ordinata dell'elenco, senza modificare l'originale, utilizzare il file sorted() funzione:

for x in sorted(mylist):
    print x

Tuttavia, gli esempi precedenti sono un po' ingenui, poiché non tengono conto della localizzazione ed eseguono un ordinamento con distinzione tra maiuscole e minuscole.Puoi sfruttare il parametro opzionale key per specificare un ordinamento personalizzato (l'alternativa, utilizzando cmp, è una soluzione deprecata, poiché deve essere valutata più volte - key viene calcolato solo una volta per elemento).

Pertanto, per ordinare in base alle impostazioni locali correnti, tenendo conto delle regole specifiche della lingua (cmp_to_key è una funzione di supporto di functools):

sorted(mylist, key=cmp_to_key(locale.strcoll))

E infine, se necessario, puoi specificare a locale personalizzato 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 l'estensione lower() metodo - quelli non sono corretti, perché funzionano solo per il sottoinsieme di caratteri ASCII.Questi due sono sbagliati 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)

Altri suggerimenti

Vale anche la pena notare il sorted() funzione:

for x in sorted(list):
    print x

Ciò restituisce una nuova versione ordinata di un elenco senza modificare l'elenco originale.

list.sort()

E 'davvero così semplice :)

Il modo corretto per 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 di mylist.sort(key=lambda x: x.lower()) funzionerà bene per contesti solo ASCII.

Ma come vengono gestite le regole di ordinamento specifiche della lingua?Tiene conto della localizzazione?

NO, list.sort() è una funzione di ordinamento generica.Se desideri ordinare secondo le regole Unicode, dovrai definire una funzione chiave di ordinamento personalizzata.Puoi provare a utilizzare il file pyuca module, ma non so quanto sia completo.

Si prega di utilizzare la funzione sorted() in Python3

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

Supponiamo s = "ZWzaAd"

Per ordinare la stringa sopra, la soluzione semplice sarà sotto uno.

print ''.join(sorted(s))

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()))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top