So sortieren Sie die Buchstaben in einer Zeichenfolge in Python alphabetisch

156

Gibt es eine einfache Möglichkeit, die Buchstaben in einer Zeichenfolge in Python alphabetisch zu sortieren?

So für:

a = 'ZENOVW'

Ich würde gerne zurückkehren:

'ENOVWZ'
Superdooperhero
quelle

Antworten:

275

Du kannst tun:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'
KZ
quelle
Beachten Sie, dass sorted(a)eine sortierte Liste zurückgegeben wird, sodass Sie für Zeichenfolgenvergleiche keine benötigen join()(siehe die Antwort von askewchan unten).
Skippy le Grand Gourou
Beachten Sie, dass ''.join(sorted(a, reverse=True, key=str.lower))dies verwendet werden kann, um eine umgekehrte Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen. Könnte praktisch sein.
Superdooperhero
89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedGibt eine Liste zurück, sodass Sie sie erneut zu einer Zeichenfolge machen können, indem Sie join:

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

Dies verbindet die Elemente von bzusammen mit einer leeren Zeichenfolge ''zwischen jedem Element.

>>> print c
'ENOVWZ'
askewchan
quelle
30

Die Sorted () -Lösung kann mit anderen Zeichenfolgen zu unerwarteten Ergebnissen führen.

Liste anderer Lösungen:

Buchstaben sortieren und unterscheiden:

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

Sortieren Sie die Buchstaben und machen Sie sie unter Beibehaltung der Großbuchstaben deutlich:

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

Buchstaben sortieren und Duplikate aufbewahren:

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

Wenn Sie das Leerzeichen im Ergebnis entfernen möchten, fügen Sie in einem der folgenden Fälle die Funktion strip () hinzu:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'
Radek
quelle
Hey, diese erste Lösung war irgendwie nützlich für eine Hausaufgabe, bei der ich einen Brief mit Halbierung finden musste. Ja, ich kenne die String-Klasse und die find () -Methode bereits, aber dies macht den Zweck der Übung
zunichte
9

Sie können reduzieren verwenden

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

Die Python-Funktion sortedgibt ein ASCII-basiertes Ergebnis für eine Zeichenfolge zurück.

INKORREKT : Im folgenden Beispiel eund dliegt hinter Hund Waufgrund des ASCII-Werts.

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

RICHTIG : Um die sortierte Zeichenfolge zu schreiben, ohne die Groß- und Kleinschreibung des Buchstabens zu ändern. Verwenden Sie den Code:

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

Wenn Sie alle Satzzeichen und Zahlen entfernen möchten. Verwenden Sie den Code:

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

Der Code kann verwendet werden, um Zeichenfolgen in alphabetischer Reihenfolge zu sortieren, ohne eine eingebaute Python-Funktion zu verwenden

k = Eingabe ("Geben Sie eine beliebige Zeichenfolge erneut ein")

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)
Kanan Joshi
quelle
1
Idealerweise möchten Sie dem Code eine Erklärung hinzufügen, um zu verdeutlichen, was er tut. Willkommen bei SO!
geisterfurz007
1

Die Antwort mit der Funktion redu () hat mir sehr gut gefallen. Hier ist eine andere Möglichkeit, die Zeichenfolge mit accumulate () zu sortieren.

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

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

tuple (akkumulieren (sortiert (en)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss ',' iiiimppssss ')

Wir wählen den letzten Index (-1) des Tupels aus

Mono
quelle
Gut gemacht für deine erste Antwort. Betrachten Sie einfach eine Zeichenfolge mit 1 Million Zeichen. Mit Ihrem Befehl tuple () wird eine große Liste akkumulierter Optionen erstellt, die unnötig viel Speicher benötigt.
tda
Einverstanden. Um die Komplexität des Speicherplatzes zu verbessern, besteht die Idee darin, mit dem Iterable selbst zu arbeiten und es in eine Datenstruktur zu konvertieren. Nett. Danke.
Mono