Historie des Themas:
Die Methode sort() ist seit den ersten Versionen von Python in den Listentyp integriert, während die Funktion sorted() in Python 2.4 eingeführt wurde. Das Sortieren von Sammlungen ist eine der häufigsten Aufgaben in der Programmierung, und Python bietet zwei Hauptwerkzeuge zur Lösung.
Problem:
Viele Anfänger verwechseln sort() (Methoden der Liste) und sorted() (Hochgradfunktion). Es fehlt das Verständnis, wann In-Place-Sortierung verwendet werden sollte, welche Objekte sortiert werden können, wie eine benutzerdefinierte Reihenfolge durch key/reverse festgelegt wird und welche möglichen Fallstricke das insbesondere für komplexe benutzerdefinierte Strukturen mit sich bringt.
Lösung:
list.sort() sortiert die originale Liste vor Ort und gibt None zurück. Ändert das Ausgangsobjekt.sorted() gibt eine neue, sortierte Liste (oder einen anderen Typ, wenn etwas anderes übergeben wird) zurück, ohne das Original zu ändern. Funktioniert mit allen iterierbaren Objekten (auch mit Generatoren).key (Sortierfunktion) und reverse (booleaner Flag für die rückwärts gerichtete Sortierung).Codebeispiel:
numbers = [5, 2, 9, 1] numbers.sort() # numbers = [1, 2, 5, 9] words = ['aaa', 'ZZZ', 'bbb'] sorted_words = sorted(words, key=str.lower, reverse=True) # sorted_words = ['ZZZ', 'bbb', 'aaa'] # words bleibt unverändert
Schlüsselfunktionen:
sort() funktioniert nur für Listen und sortiert in-place, sorted() ist universeller — funktioniert mit jedem iterierbaren Objekt.Was gibt die Variable zurück, wenn my_list = my_list.sort()?
Antwort: my_list wird None sein, da sort die Liste vor Ort sortiert und None zurückgibt. Dies ist ein verbreiteter Fehler: Sortieren Sie immer in-place ohne Zuweisung oder verwenden Sie sorted, wenn ein sortiertes Objekt als neue Liste benötigt wird.
Codebeispiel:
lst = [3, 1, 2] lst = lst.sort() # lst ist jetzt None
Kann man ein Tuple oder einen String mit der Methode sort() sortieren?
Antwort: Nein, veränderbare Objekte (tuple, str) haben keine Methode sort, aber sorted() kann darauf angewendet werden, was eine neue sortierte Liste der Elemente zurückgibt.
Codebeispiel:
tpl = (4, 2, 7) sorted_tpl = sorted(tpl) # sorted_tpl = [2, 4, 7]
Kann man eine Liste mit Elementen verschiedener Typen sortieren?
Antwort: In Python 3 verursacht die Sortierung verschiedener, nicht vergleichbarer Typen (z. B. int und str) einen TypeError. In Python 2 gab es eine spezifische Reihenfolge, jetzt muss explizit eine Funktion key angegeben werden, um alle Werte in vergleichbare Formen zu generalisieren.
Negativer Fall
Ein Programmierer hat my_list = my_list.sort() gemacht und danach den Zugriff auf die ursprüngliche Liste verloren, da der Variable der Wert None zugewiesen wurde.
Vorteile:
Nachteile:
Positiver Fall
Verwendung von sicherem sorted() zur Erzeugung einer neuen Version ohne Änderung des Originals oder die korrekte Anwendung von sort ohne Zuweisung.
Vorteile:
Nachteile: