So sortieren Sie Listen in Python

Einführung in die Sortierung von Listen in Python

In diesem Beitrag werden wir uns damit beschäftigen, wie man in Python Listen sortiert. Wir werden die Methoden `sort()` und `sorted()` genauer unter die Lupe nehmen und herausfinden, wie sie funktionieren.

Python bietet zwei Möglichkeiten, Listen zu ordnen: die Methode `sort()`, die die Liste direkt verändert, und die Funktion `sorted()`, die eine neue, sortierte Liste erstellt, ohne die ursprüngliche Liste zu verändern.

In diesem Tutorial werden wir folgende Punkte behandeln:

  • Die Syntax von `sort()` und `sorted()` im Detail.
  • Praktische Beispiele, die zeigen, wie man Listen aufsteigend und absteigend sortiert.
  • Die Anpassung der Sortierung durch den `key`-Parameter.
  • Die wesentlichen Unterschiede zwischen `sort()` und `sorted()`.

Los geht’s! 🚀

Die Syntax der `sort()`-Methode in Python

Die Methode `sort()` ist spezifisch für Listen in Python. Sie sortiert die Elemente innerhalb der Liste selbst, d.h. die ursprüngliche Liste wird verändert.

Die allgemeine Form der `sort()`-Methode sieht wie folgt aus:

<liste>.sort(reverse = True | False, key = <funktion>)

Schauen wir uns die einzelnen Teile genauer an:

  • `<liste>` bezieht sich auf eine beliebige, gültige Liste in Python.
  • `reverse` ist ein optionaler Parameter, der entweder `True` oder `False` sein kann.
  • Standardmäßig ist `reverse` auf `False` gesetzt, was zu einer aufsteigenden Sortierung führt. Setzen Sie ihn auf `True`, um die Liste absteigend zu sortieren.
  • `key` ist ebenfalls ein optionaler Parameter, der auf eine Funktion (`<funktion>`) verweist.
  • Die Funktion kann entweder eine bereits existierende oder eine selbst definierte sein.

In den folgenden Abschnitten werden wir uns verschiedene Anwendungsfälle durch Codebeispiele ansehen.

Sortieren einer Python-Liste in aufsteigender Reihenfolge

Betrachten wir eine Liste von Zahlen. Um diese aufsteigend zu sortieren, nutzen wir einfach die `sort()`-Methode.

▶ Hier ist ein kurzes Codebeispiel:

zahlen = [25, 13, 6, 17, 9]
zahlen.sort()
print(zahlen)
# Ausgabe: [6, 9, 13, 17, 25]

Die Liste `zahlen` wurde nun direkt aufsteigend sortiert, was bedeutet, dass die ursprüngliche Liste verändert wurde.

Sortieren einer Python-Liste in absteigender Reihenfolge

Um eine Liste absteigend zu sortieren, setzen wir den Parameter `reverse` auf `True`:

zahlen = [25, 13, 6, 17, 9]
zahlen.sort(reverse = True)
print(zahlen)
# Ausgabe: [25, 17, 13, 9, 6]

Wie man sieht, ist die Liste jetzt in absteigender Reihenfolge angeordnet.

Den `key`-Parameter in `sort()` verwenden

In diesem Abschnitt werden wir den `key`-Parameter nutzen, um eine benutzerdefinierte Sortierung zu realisieren.

Hier haben wir eine Funktion `mod5()`, die den Rest einer Zahl bei der Division durch 5 zurückgibt:

def mod5(x):
  return x % 5

Diese Funktion möchten wir als Schlüssel für unsere Sortierung verwenden.

Führen wir den folgenden Code aus:

zahlen = [25, 13, 6, 17, 9]
zahlen.sort(key = mod5)
print(zahlen)
# Ausgabe: [25, 6, 17, 13, 9]

Analysieren wir diese Ausgabe:

Statt der üblichen numerischen Sortierung wurde die Liste nun nach dem Rest der Division durch 5 sortiert.

  • Die Zahl mit dem kleinsten Rest steht nun am Anfang der Liste.
  • Die Zahl mit dem größten Rest steht am Ende.

Um dies zu überprüfen, betrachten wir den folgenden Code:

zahlen = [25, 13, 6, 17, 9]

for zahl in zahlen:
  print(f"{zahl} lässt den Rest {zahl%5} bei der Division durch 5")

# Ausgabe
25 lässt den Rest 0 bei der Division durch 5
13 lässt den Rest 3 bei der Division durch 5
6 lässt den Rest 1 bei der Division durch 5
17 lässt den Rest 2 bei der Division durch 5
9 lässt den Rest 4 bei der Division durch 5

Da 25 keinen Rest lässt (0), ist es das erste Element. 6 hat einen Rest von 1, also ist es das zweite, und so weiter. 9 hat den größten Rest (4) und steht somit am Ende.

Anstelle einer separaten Funktion können wir auch Lambda-Funktionen verwenden. Das sind anonyme, einzeilige Funktionen, die einen Ausdruck basierend auf ihren Argumenten zurückgeben.

Wir können die Sortierung mit einer Lambda-Funktion wie folgt umschreiben:

zahlen = [25, 13, 6, 17, 9]
zahlen.sort(key = lambda x:x%5)
print(zahlen)
# Ausgabe: [25, 6, 17, 13, 9]

Bisher haben wir gelernt, wie man Listen mit Zahlen sortiert. Nun wollen wir uns ansehen, wie man Listen von Strings sortiert.

Sortieren einer Python-Liste in alphabetischer Reihenfolge

Hier werden wir lernen, wie man eine Liste von Strings sortiert. Dazu werden wir einige Beispiele aus der Welt von Harry Potter verwenden. ✨

In unserem Beispiel ist `schueler` eine Liste von Schülern aus Hogwarts, die wir alphabetisch nach ihren Namen sortieren möchten.

Wenn wir eine Liste von Strings sortieren, erfolgt die Sortierung standardmäßig alphabetisch.

schueler = ["Harry", "Ron", "Hermine", "Draco", "Cedric"]

Geben wir die sortierte Liste aus, um das Ergebnis zu sehen:

schueler.sort()
print(schueler)
# Ausgabe: ['Cedric', 'Draco', 'Harry', 'Hermine', 'Ron']

Sortieren einer Python-Liste in umgekehrter alphabetischer Reihenfolge

Um die Liste in umgekehrter alphabetischer Reihenfolge zu sortieren, setzen wir `reverse = True`:

schueler.sort(reverse = True)
print(schueler)
# Ausgabe: ['Ron', 'Hermine', 'Harry', 'Draco', 'Cedric']

Die Liste wurde nun in umgekehrter alphabetischer Reihenfolge sortiert.

Die Sortierung mit dem `key`-Parameter anpassen

Hier werden wir die Sortierung mithilfe des optionalen `key`-Parameters anpassen.

Betrachten wir die folgende Liste, `haeuser`:

haeuser = [
    {1: "Draco", "haus": "Slytherin"},
    {2: "Harry", "haus": "Gryffindor"},
    {3: "Cedric", "haus": "Hufflepuff"}
]

`haeuser` ist eine Liste von Dictionaries. Jedes Dictionary enthält zwei Schlüssel-Wert-Paare: den Namen des Schülers und das Haus, dem er angehört.

Wir möchten diese Liste nun alphabetisch nach den Hausnamen sortieren.

Dazu nutzen wir den `key`-Parameter, der auf das Haus der jeweiligen Schüler zeigen soll.

Wir können die Hausinformationen mit der Funktion `gibHaus()` abrufen:

def gibHaus(schueler):
  return schueler['haus']

Diese Funktion gibt das Haus eines Schülers zurück.

Nun wenden wir die `sort()`-Methode auf die Liste `haeuser` an:

haeuser.sort(key = gibHaus)

Wie in der Ausgabe unten zu sehen, wurde die Liste nicht nach den Namen, sondern nach den Hausnamen sortiert: Gryffindor, Hufflepuff, Slytherin in alphabetischer Reihenfolge.

print(haeuser)
# Ausgabe:
[{2: 'Harry', 'haus': 'Gryffindor'},
 {3: 'Cedric', 'haus': 'Hufflepuff'},
 {1: 'Draco', 'haus': 'Slytherin'}]

Alternativ kann man auch eine Lambda-Funktion verwenden, um den `key`-Parameter zu definieren:

haeuser.sort(key = lambda schueler: schueler["haus"])
print(haeuser)
# Ausgabe:
[{2: 'Harry', 'haus': 'Gryffindor'},
 {3: 'Cedric', 'haus': 'Hufflepuff'},
 {1: 'Draco', 'haus': 'Slytherin'}]

Bisher haben wir die `sort()`-Methode verwendet, die die ursprüngliche Liste verändert. Was, wenn wir die originale Liste erhalten und eine sortierte Kopie haben möchten?

Dafür können wir die `sorted()`-Funktion in Python verwenden.

Die Syntax der `sorted()`-Funktion in Python

Die Funktion `sorted()` akzeptiert eine Liste oder eine beliebige Sammlung als Argument und gibt eine sortierte Kopie davon zurück, ohne die ursprüngliche Liste zu verändern.

Die Syntax der `sorted()`-Funktion ist:

<sortierte_kopie> = sorted(<liste>, reverse = True | False, key = <funktion>)

Beachten Sie die Ähnlichkeit zur Syntax der `sort()`-Methode.

  • `<liste>` ist eine beliebige Python-Liste und ein Pflichtparameter.
  • `reverse` und `key` sind optionale Parameter.

Im Gegensatz zur `sort()`-Methode, die nur für Listen gilt, kann die Funktion `sorted()` für alle iterierbaren Python-Objekte wie Listen, Strings und Dictionaries verwendet werden.

Sortieren einer Python-Liste mit der `sorted()`-Funktion

#1. Hier ist `zahlen` eine Liste von Zahlen.

Wir können `sorted()` mit `zahlen` als Argument aufrufen und das Ergebnis in `sortierte_zahlen1` speichern:

zahlen = [25, 13, 6, 17, 9]
sortierte_zahlen1 = sorted(zahlen)
print(sortierte_zahlen1)
# Ausgabe: [6, 9, 13, 17, 25]

`zahlen` wurde hier standardmäßig in aufsteigender Reihenfolge sortiert.

Die ursprüngliche Liste `zahlen` wurde nicht verändert, da `sorted()` eine neue Liste zurückgibt. Dies wird hier bestätigt:

print(zahlen)
# Ausgabe: [25, 13, 6, 17, 9]

#2. Setzen wir den optionalen Parameter `reverse` auf `True` und speichern das Ergebnis in `sortierte_zahlen2`:

`sortierte_zahlen2` ist eine neue Liste, in der die Elemente in absteigender Reihenfolge sortiert sind:

sortierte_zahlen2 = sorted(zahlen, reverse = True)
print(sortierte_zahlen2)
# Ausgabe: [25, 17, 13, 9, 6]

#3. Betrachten wir nun ein Beispiel mit Strings:

Wie zuvor gibt `sorted()` eine neue sortierte Liste zurück, wobei die Einträge alphabetisch sortiert sind.

fruechte = ['birnen','erdbeeren','apfel','ananas','heidelbeeren']
sortierte_fr1 = sorted(fruechte)
print(sortierte_fr1)
# Ausgabe:
['ananas', 'apfel', 'birnen', 'erdbeeren', 'heidelbeeren']

#4. Passen wir die Sortierung mit dem `key`-Parameter an. Setzen wir den Schlüssel auf `len`, wodurch die Liste nach der Länge der Strings sortiert wird.

Die Python Funktion `len()` akzeptiert Iterables wie Listen, Strings oder Tupel und gibt die Länge des Iterables zurück.

Der kürzeste String erscheint zuerst in der sortierten Liste und der längste am Ende.

fruechte = ['birne','erdbeere','apfel','ananas','heidelbeere']
sortierte_fr2 = sorted(fruechte, key = len)
print(sortierte_fr2)
# Ausgabe:
['birne', 'apfel', 'ananas', 'erdbeere', 'heidelbeere']

In dieser Ausgabe ist „birne“ der kürzeste und „heidelbeere“ der längste String.

Die `sort()`-Methode vs. die `sorted()`-Funktion in Python

Wir haben sowohl die Methode `sort()` als auch die Funktion `sorted()` kennengelernt. Hier sind die wichtigsten Unterschiede:

Python `sort()`-Methode Python `sorted()`-Funktion
Sortiert die Liste direkt – verändert die originale Liste. Gibt eine neue sortierte Liste zurück.
Funktioniert nur mit Python-Listen. Funktioniert mit allen Python-Iterables (Listen, Strings, etc.).
Gibt `None` zurück. Gibt eine sortierte Kopie des Iterables zurück.

Zusammenfassung 👩‍🏫

Ich hoffe, dieses Tutorial über die Sortierung von Listen in Python war hilfreich.

Fassen wir kurz zusammen, was wir gelernt haben:

  • Verwenden Sie `liste.sort(reverse = True | False, key = <funktion>)` mit den optionalen Parametern `reverse` und `key`, um eine Liste direkt zu sortieren.
  • Verwenden Sie `sorted(liste, reverse = True | False, key = <funktion>)` für eine sortierte Kopie der Liste.

Nachdem wir gelernt haben, wie man Python-Listen sortiert, können Sie sich nun mit Listen-Comprehensions oder der Arbeit mit Dateien und JSON-Dateien beschäftigen.

Sie können die obigen Beispiele im wdzwdz Online Python Compiler ausprobieren.