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):
>>> x = ["aa", "A", "bb", "B", "cc", "C"]
>>> x.sort()
>>> x
['A', 'B', 'C', 'aa', 'bb', 'cc']
>>> x.sort(key=str.lower) # <===== there it is!
>>> x
['A', 'aa', 'B', 'bb', 'C', 'cc']
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:
x = ["aa", "A", "bb", "B", "cc", "C"]
x.sort()
x
x.sort(key=str.lower)
x
Beachten Sie, dass, wenn Ihre Zeichenfolgen Unicode-Zeichenfolgen sind (wie u'some string'
), der obige x.sort(key=str.lower)
Befehl nur in Python 2 (in diesem Fall NICHT in Python 3) fehlschlägt und den folgenden Fehler ausgibt:
TypeError: descriptor 'lower' requires a 'str' object but received a 'unicode'
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:
# for Python2, ensure all elements are ASCII (NOT unicode) strings first
x = [str(element) for element in x]
# for Python2, this sort will only work on ASCII (NOT unicode) strings
x.sort(key=str.lower)
Verweise:
- https://docs.python.org/3/library/stdtypes.html#list.sort
- Konvertieren Sie eine Unicode-Zeichenfolge in eine Zeichenfolge in Python (mit zusätzlichen Symbolen).
- https://www.programiz.com/python-programming/list-comprehension