Listen sind geordnete, veränderbare Sequenzen
Die Liste ist der meistgenutzte Sammlungstyp in Python. Wenn du eine geordnete Menge von Werten pflegst, die sich ändern könnte — hinzufügen, entfernen, sortieren, aktualisieren —, ist eine Liste fast immer die richtige Wahl.
Du erzeugst eine mit eckigen Klammern:
Listen können alles enthalten, sogar andere Listen. In der Praxis enthalten die meisten Listen eine Art Ding — eine Liste von Nutzern, eine Liste von Zahlen — weil das am einfachsten nachzudenken ist.
Indizieren
Jedes Element hat eine Position, beginnend bei 0. Zugriff mit eckigen Klammern:
Ein Index, der nicht existiert, löst IndexError aus. Könnte er außerhalb liegen, prüfe erst die Länge oder pack den Zugriff in ein try.
Slicing
Slicing gibt dir einen Bereich von Elementen. Die Syntax ist list[start:stop:step], wie bei Strings:
Zwei Dinge lohnen es, fest einzuprägen:
- Slicing liefert immer eine neue Liste. Ein Ändern des Slices betrifft das Original nicht.
- Der Stopp-Index ist exklusiv —
nums[2:5]gibt Indizes 2, 3 und 4, nicht 5.
Anhängen, erweitern und einfügen
Die drei „etwas zu einer Liste hinzufügen“-Methoden tun Verschiedenes, und sie zu verwechseln ist eine häufige Fehlerquelle:
append(x)fügtxals einzelnes Element hinzu — auch wennxeine Liste ist.items.append([1, 2])fügt die Liste selbst als einen Eintrag hinzu.extend(iterable)fügt jedes Element aus der Iterable hinzu.items.extend([1, 2])fügt zwei Einträge hinzu.insert(i, x)fügt an einer bestimmten Position ein und verschiebt alles abium eins nach rechts.
+= mit einer Liste rechts funktioniert wie extend:
Und zum Entfernen:
Versuchst du, etwas per remove() zu entfernen, das nicht in der Liste ist, wirft Python ValueError. Brauchst du „entferne, falls vorhanden“, prüf vorher mit in oder nimm ein try.
Löschen per Index geht auch mit del:
Länge, Zugehörigkeit, Zählen
in ist der lesbare Weg zu prüfen, ob eine Liste einen Wert enthält. Stellst du diese Frage häufig auf einer großen Liste, nimm stattdessen ein Set — Set-Mitgliedschaft ist O(1), wo Liste O(n) ist.
Sortieren
Zwei Wege, und die Wahl zählt:
Beide akzeptieren reverse=True für absteigende Reihenfolge:
Und eine key-Funktion für eigene Ordnung:
key wird auf jedes Element angewendet, und das Ergebnis wird verglichen. Häufige Fälle: nach Länge, nach einem bestimmten Attribut oder nach der Kleinbuchstabenform eines Strings sortieren.
Umkehren
Drei Varianten, je nach Bedarf:
Nimm in place, wenn du das Original nicht brauchst. Nimm Slicing, wenn du eine neue Kopie willst. Nimm reversed(), wenn du nur rückwärts iterieren willst, ohne eine neue Liste zu materialisieren.
Die Falle der geteilten Referenz
Listen sind veränderbar, und Variablen sind Referenzen. Das heißt, zwei Variablen können auf dieselbe Liste zeigen:
b = a hat die Liste nicht kopiert; es hat b zu einem zweiten Namen für dieselbe Liste gemacht. Willst du eine Kopie, fordere sie an:
Das beißt jeden Python-Programmierer mindestens einmal. Merk dir: = zwischen zwei Listen kopiert nicht.
Schleifen und Bauen
Das Grundmuster kennst du schon aus dem for-Schleifen-Kapitel:
Das ist lesbar und bleibt immer okay. Sobald du dich wohlfühlst, macht die List Comprehension dasselbe in einer Zeile:
Comprehensions behandeln wir zwei Seiten später ausführlich.
Ein schneller Spickzettel
Methoden, die es zu kennen lohnt, auf einen Blick:
append(x)— ans Ende anhängenextend(iter)— jedes Element aus einer Iterable anhängeninsert(i, x)— an Index i einfügenpop()/pop(i)— entfernen und zurückgebenremove(x)— erstes Vorkommen von x entfernensort()/sort(key=...)/sort(reverse=True)reverse()index(x)— Position des ersten xcount(x)— Anzahl der xcopy()— flache Kopie
Als Nächstes
Listen sind das Arbeitstier. Als Nächstes schauen wir uns Tupel an — ihren unveränderlichen Cousin — und wann stattdessen ein Tupel die bessere Wahl ist.
Häufig gestellte Fragen
Wie erstelle ich eine Liste in Python?
Nutz eckige Klammern mit kommagetrennten Werten: fruits = ['apple', 'banana', 'cherry']. Listen können jeden Typ enthalten, und du kannst Typen in derselben Liste mischen, auch wenn die meisten echten Listen aus Gewohnheit homogen sind.
Wie sortiere ich eine Liste in Python?
Ruf .sort() auf der Liste auf, um sie in place zu sortieren, oder nimm das eingebaute sorted(list), um eine neue sortierte Liste zu bekommen, ohne das Original zu verändern. Beide akzeptieren reverse=True für absteigende Reihenfolge und ein key=-Argument für benutzerdefinierte Sortierschlüssel.
Wie drehe ich eine Liste in Python um?
list.reverse() kehrt in place um. list[::-1] liefert eine neue umgekehrte Liste. reversed(list) liefert einen Iterator, den du durchlaufen kannst. Wähl das, was zu deinem Bedarf passt: in place, neue Kopie oder Lazy-Iteration.