Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 126
Elemente in einer Liste mit sort() sortieren
ОглавлениеListen von Zahlenwerten oder Strings lassen sich mit der Methode sort() sortieren. Betrachten Sie dazu das folgende Beispiel:
>>> spam = [2, 5, 3.14, 1, -7]
>>> spam.sort()
>>> spam
[-7, 1, 2, 3.14, 5]
>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']
>>> spam.sort()
>>> spam
['ants', 'badgers', 'cats', 'dogs', 'elephants']
Wenn Sie True für das Schlüsselwortargument reverse übergeben, sortiert sort() die Elemente in umgekehrter Reihenfolge:
>>> spam.sort(reverse=True)
>>> spam
['elephants', 'dogs', 'cats', 'badgers', 'ants']
Bei der Verwendung von sort() müssen Sie drei Dinge beachten. Erstens sortiert sort() die Liste unmittelbar. Versuchen Sie also nicht, den Rückgabewert zu erfassen, indem Sie Code wie spam = spam.sort() schreiben.
Zweitens können Sie keine Listen sortieren, in denen sowohl Zahlen als auch Strings vorkommen, da Python solche unterschiedlichen Werte nicht vergleichen kann. Bei dem folgenden Beispiel ergibt sich daher der Fehler TypeError:
>>> spam = [1, 3, 2, 4, 'Alice', 'Bob']
>>> spam.sort()
Traceback (most recent call last):
File "<pyshell#70>", line 1, in <module>
spam.sort()
TypeError: '<' not supported between instances of 'str' and 'int'
Drittens verwendet sort() statt der normalen alphabetischen Sortierung eine ASCII-Sortierung. Das bedeutet, dass alle Großbuchstaben vor den Kleinbuchstaben angeordnet werden. Ein kleines a steht daher hinter dem großen Z! Das können Sie an folgendem Beispiel erkennen:
>>> spam = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']
>>> spam.sort()
>>> spam
['Alice', 'Bob', 'Carol', 'ants', 'badgers', 'cats']
Wenn Sie die Werte in regulärer alphabetischer Reihenfolge sortieren müssen, übergeben Sie im Aufruf der Methode sort() den Wert str.lower für das Schlüsselwortargument key:
>>> spam = ['a', 'z', 'A', 'Z']
>>> spam.sort(key=str.lower)
>>> spam
['a', 'A', 'z', 'Z']
Dadurch behandelt sort() alle Elemente in der Liste so, als begännen sie mit einem Kleinbuchstaben, ohne sie aber tatsächlich zu ändern.