ProgrammierungPython Entwickler

Wie funktioniert die Funktion sorted() in Python, was unterscheidet sie von der Methode sort() von Listen, welche Nuancen gibt es bei der Verwendung des Schlüssels key und des Parameters reverse?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

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.
  • Der Parameter 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:

  • sorted() gibt immer eine neue Liste zurück, ohne die Quelle zu berühren
  • sort() arbeitet nur mit der Liste selbst, gibt kein neues Objekt zurück
  • die Option key kann jede Funktion sein, die Werte zum Vergleichen zurückgibt

Fragen mit Fallstricken.

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).

Typische Fehler und Antipatterns

  • sort() verwenden, in der Erwartung, eine neue sortierte Liste zu erhalten
  • versuchen, ein unveränderliches Objekt mit der Methode sort() zu sortieren
  • eine Funktion in key angeben, die Werte mit unterschiedlichen Typen zurückgibt

Beispiel aus dem Leben

Negativer Fall

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:

  • Ändert die Liste vor Ort (spart manchmal Speicher)

Nachteile:

  • Gibt None zurück, was die weitere Logik bricht

Positiver Fall

Richtige Verwendung:

lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']

Vorteile:

  • Die ursprüngliche Liste wird nicht verändert
  • Wir erhalten das erwartete Ergebnis

Nachteile:

  • Benötigt zusätzlichen Speicher für die neue Liste