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'

Antworten:


275

Du kannst tun:

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

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'

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'

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'

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'

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)

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.