Python verfügt über einen praktischen integrierten Listentyp namens „list“. Listenliterale werden in eckigen Klammern [ ] geschrieben. Listen funktionieren ähnlich wie Strings. Verwenden Sie die Funktion len() und eckige Klammern [ ], um auf Daten zuzugreifen. Das erste Element hat den Index 0. (Siehe die offizielle Liste der Python-Dokumente.)
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
Durch die Zuweisung mit einem „=“ in Listen wird keine Kopie erstellt. Stattdessen weisen die beiden Variablen durch die Zuweisung auf dieselbe Liste im Arbeitsspeicher.
b = colors ## Does not copy the list
Die „leere Liste“ besteht nur aus einem leeren Klammerpaar [ ]. Mit dem Pluszeichen werden zwei Listen aneinander angehängt. [1, 2] + [3, 4] ergibt also [1, 2, 3, 4] (genau wie bei Strings).
FOR und IN
Die Python-Konstrukte *for* und *in* sind äußerst nützlich. Wir sehen uns zuerst ihre Verwendung mit Listen an. Mit dem *for*-Konstrukt – for var in list
– können Sie sich ganz einfach jedes Element in einer Liste (oder einer anderen Sammlung) ansehen. Fügen Sie der Liste während der Iteration keine Elemente hinzu oder entfernen Sie sie nicht.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
Wenn Sie wissen, welche Art von Element sich in der Liste befindet, verwenden Sie in der Schleife einen Variablennamen, der diese Informationen erfasst, z. B. „num“, „name“ oder „url“. Da Python-Code keine andere Syntax hat, die Sie an Typen erinnert, sind die Variablennamen ein wichtiger Weg, um den Überblick zu behalten. (Das ist etwas irreführend. Mit zunehmender Erfahrung mit Python werden Sie Verweise auf Typhinweise sehen, mit denen Sie Ihren Funktionsdefinitionen typisierte Informationen hinzufügen können. Python verwendet diese Typhinweise nicht, wenn es Ihre Programme ausführt. Sie werden von anderen Programmen wie IDEs (Integrierte Entwicklungsumgebungen) und Tools zur statischen Analyse wie Linter/Typprüfern verwendet, um zu prüfen, ob Ihre Funktionen mit kompatiblen Argumenten aufgerufen werden.
Das Konstrukt „*in*“ allein ist eine einfache Möglichkeit, zu prüfen, ob ein Element in einer Liste (oder einer anderen Sammlung) enthalten ist. Mit value in collection
wird geprüft, ob der Wert in der Sammlung enthalten ist, und es wird „Wahr“ oder „Falsch“ zurückgegeben.
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
Die for/in-Konstrukte werden häufig in Python-Code verwendet und funktionieren bei anderen Datentypen als list. Sie sollten sich daher nur deren Syntax merken. Möglicherweise haben Sie Gewohnheiten aus anderen Sprachen, in denen Sie manuell über eine Sammlung iterieren. In Python sollten Sie einfach for/in verwenden.
Sie können auch for/in verwenden, um mit einem String zu arbeiten. Der String verhält sich wie eine Liste seiner Zeichen, daher gibt for ch in s: print(ch)
alle Zeichen in einem String aus.
Bereich
Die Funktion „Bereich(n)“ gibt die Zahlen 0, 1, … n-1 zurück und „Bereich(a, b)“ gibt a, a+1, … b-1 zurück – bis einschließlich der letzten Zahl. Mit der Kombination aus For-Schleife und der Funktion range() können Sie eine herkömmliche numerische For-Schleife erstellen:
## print the numbers from 0 through 99 for i in range(100): print(i)
Es gibt eine Variante, xrange(), die bei leistungskritischen Fällen die Kosten für das Erstellen der gesamten Liste vermeidet. In Python 3 hat range() eine gute Leistung und Sie können xrange() vergessen.
Während Schleife
Python hat auch die Standard-while-Schleife und die Anweisungen *break* und *continue* funktionieren wie in C++ und Java, um den Ablauf der innersten Schleife zu ändern. Die obigen For-/In-Schleifen lösen den üblichen Fall der Iteration über jedes Element in einer Liste, aber die while-Schleife gibt Ihnen die vollständige Kontrolle über die Indexnummern. Hier sehen Sie eine while-Schleife, die auf jedes dritte Element in einer Liste zugreift:
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
Methoden auflisten
Hier sind einige weitere gängige Listenmethoden.
- list.append(elem): Hiermit wird der Liste ein einzelnes Element hinzugefügt. Häufiger Fehler: Die neue Liste wird nicht zurückgegeben, sondern nur die ursprüngliche Liste geändert.
- list.insert(index, elem): Hiermit wird das Element an der angegebenen Position eingefügt und die Elemente nach rechts verschoben.
- Mit list.extend(list2) werden die Elemente in list2 ans Ende der Liste angehängt. Die Verwendung von + oder += bei einer Liste ähnelt der Verwendung von extend().
- list.index(elem): Sucht vom Anfang der Liste nach dem angegebenen Element und gibt dessen Index zurück. Löst eine ValueError-Ausnahme aus, wenn das Element nicht vorhanden ist. Verwenden Sie „in“, um die Überprüfung ohne ValueError durchzuführen.
- list.remove(elem): Sucht nach der ersten Instanz des angegebenen Elements und entfernt es. Wenn das Element nicht vorhanden ist, wird eine ValueError-Ausnahme ausgelöst.
- list.sort(): Sortiert die Liste vor Ort (wird nicht zurückgegeben). (Die später gezeigte Funktion „Sorted()“ wird bevorzugt.)
- list.reverse() - kehrt die vorhandene Liste um (gibt sie nicht zurück)
- list.pop(index): Entfernt das Element am angegebenen Index und gibt es zurück. Gibt das Element ganz rechts zurück, wenn der Index weggelassen wird (etwa das Gegenteil von „append()“).
Beachten Sie, dass dies *Methoden* eines Listenobjekts sind, während len() eine Funktion ist, die die Liste (oder einen String oder was auch immer) als Argument nimmt.
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
Häufige Fehler: Beachten Sie, dass die oben genannten Methoden nicht die geänderte Liste zurückgeben, sondern lediglich die ursprüngliche Liste ändern.
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
Liste „Aufbau“
Ein gängiges Muster besteht darin, eine Liste mit der leeren Liste [] zu beginnen und dann mit "append()" oder "extend()" Elemente hinzuzufügen:
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Segmente auflisten
Slices funktionieren bei Listen genauso wie bei Strings und können auch verwendet werden, um Teilbereiche der Liste zu ändern.
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
Übung: list1.py
Um das Material in diesem Abschnitt zu üben, können Sie die Probleme in list1.py ausprobieren, bei denen keine Sortierung verwendet wird (in den Grundlegenden Übungen).