Ich habe eine Liste solcher Zeichenfolgen:
['Aden', 'abel']
Ich möchte die Elemente sortieren, ohne die Groß- und Kleinschreibung zu berücksichtigen. Also möchte ich bekommen:
['abel', 'Aden']
Aber ich bekomme das Gegenteil mit sorted()
oder list.sort()
, weil Großbuchstaben vor Kleinbuchstaben erscheinen.
Wie kann ich den Fall ignorieren? Ich habe Lösungen gesehen, bei denen alle Listenelemente verkleinert werden, aber ich möchte die Groß- und Kleinschreibung der Listenelemente nicht ändern.
Antworten:
In Python 3.3+ gibt es die
str.casefold
Methode, die speziell für das Caseless Matching entwickelt wurde:Verwenden Sie in Python 2
lower()
:Es funktioniert sowohl für normale als auch für Unicode-Zeichenfolgen, da beide eine
lower
Methode haben.In Python 2 funktioniert es für eine Mischung aus normalen und Unicode-Zeichenfolgen, da die Werte der beiden Typen miteinander verglichen werden können. Python 3 funktioniert jedoch nicht so: Sie können eine Byte-Zeichenfolge und eine Unicode-Zeichenfolge nicht vergleichen. In Python 3 sollten Sie also das Vernünftige tun und nur Listen eines Zeichenfolgentyps sortieren.
quelle
str.lower
Funktion assorted(lst, key=str.lower)
oder (Python 2) dielower
Methode desstring
Moduls as verwendetsorted(lst, key=string.lower)
. Man kann auchstr.lower
für Strings in Python 2 verwenden, müsste dann aberunicode.lower
fürunicode
Objekte verwenden, währendstring.lower
beide akzeptiert werden (was, wie Sie sagen, wahrscheinlich keine wirklich "vernünftige" Funktionsweise ist).In Python 3
str
ist Unicode, aber in Python 2 können Sie diesen allgemeineren Ansatz verwenden, der sowohl fürstr
als auch fürunicode
:quelle
[['Aden'], ['abel']]
sorted(x,key=lambda i:i[0].lower())
Sie können dies auch versuchen, um die Liste direkt zu sortieren:
quelle
Dies funktioniert in Python 3 und beinhaltet keine Kleinschreibung des Ergebnisses (!).
quelle
In Python3 können Sie verwenden
quelle
Ich habe es für Python 3.3 so gemacht:
Dann können Sie einfach diese Funktion aufrufen:
quelle
Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung, Sortieren der Zeichenfolge an Ort und Stelle in Python 2 ODER 3 (getestet in Python 2.7.17 und Python 3.6.9):
Der Schlüssel ist
key=str.lower
. So sehen diese Befehle nur mit den Befehlen aus, damit Sie sie einfach kopieren und testen können:Beachten Sie, dass, wenn Ihre Zeichenfolgen Unicode-Zeichenfolgen sind (wie
u'some string'
), der obigex.sort(key=str.lower)
Befehl nur in Python 2 (in diesem Fall NICHT in Python 3) fehlschlägt und den folgenden Fehler ausgibt:Wenn dieser Fehler auftritt, führen Sie entweder ein Upgrade auf Python 3 durch, wo die Unicode-Sortierung durchgeführt wird, oder konvertieren Sie Ihre Unicode-Zeichenfolgen zuerst in ASCII-Zeichenfolgen. Verwenden Sie dazu ein Listenverständnis wie folgt:
Verweise:
quelle
Versuche dies
Ausgabe
['abel', 'Aden']
quelle