Historie der Frage:
Von Anfang an stellte die Programmiersprache Python integrierte Werkzeuge zur Sortierung von Sammlungen zur Verfügung. Die Methoden sort() und die Funktion sorted() wurden in der zweiten Version von Python eingeführt, aber ab Python 2.4 wurde sorted() als universelles Mittel zur Sortierung beliebiger iterierbarer Objekte (nicht nur Listen) eingeführt.
Problem:
Oft müssen Daten nach verschiedenen Kriterien sortiert werden und man möchte nicht immer das ursprüngliche Objekt ändern. Anfänger verwechseln sort() und sorted(), verstehen nicht, wo jede angewendet wird, und machen Fehler mit dem Sortierschlüssel und der umgekehrten Reihenfolge.
Lösung:
sorted(iterierbares_objekt, key=None, reverse=False) gibt immer ein neues Listenobjekt zurück, ohne das ursprüngliche zu verändern.list.sort(key=None, reverse=False) sortiert die Liste vor Ort (in-place) und gibt None zurück.key ist eine Funktion, die definiert, nach welchem Kriterium sortiert werden soll.reverse=True ändert die Reihenfolge in umgekehrt.Beispiel für die Sortierung einer Liste von Zeichenfolgen nach ihrer Länge in umgekehrter Reihenfolge:
words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']
Wesentliche Merkmale:
Was gibt die Methode sort() zurück?
Die Methode list.sort() sortiert die Liste selbst und gibt immer None zurück, was oft vergessen wird.
lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]
Kann man ein Tuple mit sort() sortieren?
Nein, Tuples sind unveränderlich, sie haben keine Methode .sort(). Verwenden Sie sorted() zum Sortieren.
tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]
Was passiert, wenn man eine Funktion in key angibt, die verschiedene Typen zurückgibt?
Es wird eine Ausnahme vom Typ TypeError ausgelöst, wenn die zurückgegebenen Werte nicht vergleichbar sind (z. B. int und str).
In einem Vorstellungsgespräch wird gebeten, eine nach Länge sortierte Liste zurückzugeben, und der Kandidat macht:
lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None
Vorteile:
Nachteile:
Richtige Verwendung:
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
Vorteile:
Nachteile: