Come ordinare le lettere in una stringa in ordine alfabetico in Python


157

C'è un modo semplice per ordinare le lettere in una stringa in ordine alfabetico in Python?

Così per:

a = 'ZENOVW'

Vorrei tornare:

'ENOVWZ'

Risposte:


276

Tu puoi fare:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'

Si noti che sorted(a)restituirà un elenco ordinato, quindi per i confronti di stringhe non è necessario join()(vedere la risposta askewchan di seguito).
Skippy le Grand Gourou,

Si noti che ''.join(sorted(a, reverse=True, key=str.lower))può essere utilizzato per eseguire un ordinamento senza distinzione tra maiuscole e minuscole. Potrebbe essere utile.
Superdooperhero,

89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedrestituisce un elenco, quindi puoi renderlo nuovamente una stringa usando join:

>>> c = ''.join(b)

che unisce gli elementi binsieme a una stringa vuota ''tra ogni elemento.

>>> print c
'ENOVWZ'

31

La soluzione Sorted () può fornire risultati imprevisti con altre stringhe.

Elenco di altre soluzioni:

Ordina le lettere e rendile distinte:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower())))
' belou'

Ordina le lettere e rendile distinte mantenendo i tappi:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s)))
' Bbelou'

Ordina le lettere e conserva i duplicati:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(s))
' BBbbbbeellou'

Se vuoi liberarti dello spazio nel risultato, aggiungi la funzione strip () in uno di questi casi citati:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'

Ehi, quella prima soluzione è stata un po 'utile per un compito in cui ho dovuto trovare una lettera usando la bisection. Sì, conosco già la classe di stringhe e il metodo find (), ma questo sconfigge lo scopo dell'esercizio;)
runlevel0

9

Puoi usare riduci

>>> a = 'ZENOVW'
>>> reduce(lambda x,y: x+y, sorted(a))
'ENOVWZ'

7

La funzione Python sortedrestituisce risultati basati su ASCII per stringa.

ERRATO : Nell'esempio riportato di seguito, eed dè alle spalle He la Wcausa è di valore ASCII.

>>>a = "Hello World!"
>>>"".join(sorted(a))
' !!HWdellloor'

CORRETTO : per scrivere la stringa ordinata senza cambiare il caso della lettera. Usa il codice:

>>> a = "Hello World!"
>>> "".join(sorted(a,key=lambda x:x.lower()))
' !deHllloorW'

Se si desidera rimuovere tutti i segni di punteggiatura e numeri. Usa il codice:

>>> a = "Hello World!"
>>> "".join(filter(lambda x:x.isalpha(), sorted(a,key=lambda x:x.lower())))
'deHllloorW'

3

il codice può essere usato per ordinare la stringa in ordine alfabetico senza usare alcuna funzione integrata di Python

k = input ("Inserisci di nuovo qualsiasi stringa")

li = []
x = len(k)
for i in range (0,x):
    li.append(k[i])

print("List is : ",li)


for i in range(0,x):
    for j in range(0,x):
        if li[i]<li[j]:
            temp = li[i]
            li[i]=li[j]
            li[j]=temp
j=""

for i in range(0,x):
    j = j+li[i]

print("After sorting String is : ",j)

1
Idealmente, vuoi aggiungere qualche spiegazione al codice per chiarire cosa fa. Benvenuti in SO!
geisterfurz007,

1

Mi è davvero piaciuta la risposta con la funzione di riduzione (). Ecco un altro modo per ordinare la stringa usando accumulate ().

from itertools import accumulate
s = 'mississippi'
print(tuple(accumulate(sorted(s)))[-1])

ordinati (i) -> ['i', 'i', 'i', 'i', 'm', 'p', 'p', 's', 's', 's', 's' ]

tupla (accumula (ordinata / e) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss ',' iiiimppssss ')

Stiamo selezionando l'ultimo indice (-1) della tupla


Ben fatto per la tua prima risposta. Basta considerare una stringa di 1 milione di caratteri, il comando tuple () creerà un enorme elenco di opzioni accumulate che utilizza una quantità di memoria inutilmente elevata.
TDA

Concordato. Quindi, per migliorare la complessità dello spazio, l'idea è di lavorare con lo stesso iterabile, incerto di convertirlo in una struttura di dati. Bello. Grazie.
Mono
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.