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.