it-swarm.it

Ordina una stringa in python di ordine lessicografico

Voglio ordinare una stringa in un elenco in ordine lessicografico come

str='aAaBbcCdE'

['A','a','a','B','b','C','c','d','E']

ma sorted() mi dà questo risultato:

['A','B','C','E','a','a','b','c','d']

Come posso ordinare lessicograficamente?

21
Bipul Jain

Non utilizzare le funzioni lambda quando ce ne sono di quelle integrate per il lavoro. Inoltre, non utilizzare mai l'argomento cmp di ordinato perché è deprecato:

sorted(s, key=str.lower)

sorted(s, key=str.upper)

Ma questo potrebbe non tenere "A" e "a" in ordine, quindi:

sorted(sorted(s), key=str.upper)

questo sarà e, per la natura di sorted, l'operazione sarà molto veloce per liste quasi ordinate (il secondo sorted).

31
JBernardo

Potresti usare una 2-Tupla per la chiave:

text='aAaBbcCdE'
sorted(text,key=lambda x:(str.lower(x),x))
# ['A', 'a', 'a', 'B', 'b', 'C', 'c', 'd', 'E']

Il primo elemento della Tupla, str.lower(x) è la chiave primaria (rendendo a prima di B), mentre x stessa rompe i legami (rendendo A prima di a).

11
unutbu

cmp era il vecchio modo di fare questo, ormai deprecato, ma per i posteri:

s='aAaBbcCdE'
sorted(s, lambda x,y: cmp(x.lower(), y.lower()) or cmp(x,y))
4
Karoly Horvath

data = input() data=list(data) data.sort()

Ora la variabile "data" avrà input di input lessicograficamente forniti. 

0
tushar