Das Sortieren in Python ist eine dieser Aufgaben, die so einfach erscheint – bis Sie anfangen, die Macken zu bemerken. Nachdem ich eine Weile mit der Funktion sorted() in Python gearbeitet habe, bin ich auf einige überraschende Verhaltensweisen gestoßen, die nicht sofort offensichtlich waren. Hier sind ein paar Dinge, die sehr hilfreich (und manchmal verwirrend) sein können.
sorted() ist stabil
Eines der wichtigsten (und unterschätzten) Dinge an der Funktion sorted() in Python ist, dass sie stabil ist.
Das bedeutet, dass zwei Elemente, die gemäß den Sortierkriterien gleich sind, in der gleichen Reihenfolge angezeigt werden, in der sie in der ursprünglichen Liste waren.
Es mag wie ein kleines Detail erscheinen, aber diese Funktion kann unglaublich nützlich sein, wenn Sie nach mehreren Kriterien sortieren.
Wenn Sie z. B. eine Liste von Personen nach Alter und dann nach Namen sortieren möchten, können Sie die Vorteile der Stabilität nutzen, indem Sie zweimal sortieren:
people = [
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 30},
{"name": "Charlie", "age": 25}
]
# First, sort by name
people_sorted = sorted(people, key=lambda x: x["name"])
# Then, sort by age (stable sort keeps previous name order for equal ages)
people_sorted = sorted(people_sorted, key=lambda x: x["age"])
print(people_sorted)
# [{'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 25}, {'name': 'Bob', 'age': 30}]
In der endgültigen sortierten Liste haben Alice und Charlie beide ein Alter von 25 Jahren, aber da wir ursprünglich nach Namen sortiert haben, erscheint Alice immer noch vor Charlie.
Diese Stabilität kann Ihnen viel Ärger ersparen, wenn Sie mit komplexen Sortieranforderungen arbeiten.
Benutzerdefinierte Sortierung mit key – es ist flexibler als Sie denken
Hier wird es interessant: Der Parameter key in sorted() kann viel mehr als nur nach einem einzelnen Attribut sortieren.
Es kann tatsächlich jede Funktion annehmen, die einen Wert zurückgibt, was bedeutet, dass Sie eine ziemlich fortgeschrittene Sortierung durchführen können, indem Sie Werte nach Belieben kombinieren und transformieren.
Angenommen, Sie möchten eine Liste von Zeichenfolgen nach ihrer Länge sortieren, aber Sie möchten auch Verknüpfungen aufheben, indem Sie alphabetisch sortieren.
Sie können dies erreichen, indem Sie ein Tupel innerhalb der key-Funktion erstellen:
words = ["banana", "apple", "pear", "blueberry", "kiwi"]
# Sort by length, then alphabetically for words of the same length
sorted_words = sorted(words, key=lambda x: (len(x), x))
print(sorted_words)
# ['kiwi', 'pear', 'apple', 'banana', 'blueberry']
Die Funktion key sortiert hier zuerst nach len(x) und dann nach x sich selbst (alphabetische Reihenfolge).
Dieser Trick kann besonders nützlich sein, wenn Sie nach mehreren Kriterien sortieren müssen, ohne wiederholt sorted() in Python aufrufen zu müssen.
Rückwärtssortierung leicht gemacht
Es ist erwähnenswert, dass es einen Parameter reverse=True
gibt, mit dem Sie die Sortierreihenfolge mit einem einfachen Wert umkehren können.
Sie müssen Ihre Funktion nicht ändern oder irgendetwas mit key erstellen – stellen Sie sie einfach auf absteigende Reihenfolge ein.
numbers = [4, 2, 9, 1]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [9, 4, 2, 1]
Fazit
Die Funktion sorted() in Python ist täuschend mächtig. Von seiner Stabilität bis hin zur Flexibilität der benutzerdefinierten Sortierung mit key ist es vollgepackt mit Funktionen, die es zu mehr als nur einem einfachen Werkzeug zum Ordnen von Listen machen.
Das Verständnis dieser Eigenheiten hat es mir ermöglicht, komplexe Sortieraufgaben mit Leichtigkeit zu bewältigen – und dabei einige unerwartete Verhaltensweisen zu vermeiden!
Weiterer lesenswerter Artikel: Architecture Decision Records (ADRs): Hilfe bei der SW-Architektur-Verwaltung