Python verfügt über einen praktischen integrierten Listentyp namens „list“. Listenliterale werden in eckige Klammern [ ] geschrieben. Listen funktionieren ähnlich wie Zeichenfolgen – verwenden Sie die Funktion len() und eckige Klammern [ ], um auf Daten zuzugreifen, wobei sich das erste Element am Index 0 befindet. Weitere Informationen finden Sie in der offiziellen Dokumentation zur Python.org-Liste.
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
Eine Zuweisung mit einem „=“ in Listen wird nicht kopiert. Stattdessen verweisen die beiden Variablen auf die eine Liste im Arbeitsspeicher.
b = colors ## Does not copy the list
Die „leere Liste“ ist nur ein leeres Paar eckiger Klammern [ ]. Das '+' zwei Listen anhängt, sodass [1, 2] + [3, 4] [1, 2, 3, 4] ergibt (wie bei "+" mit Zeichenfolgen).
FOR und IN
Die *for*- und *in*-Konstrukte in Python sind äußerst nützlich. Wir werden sie zum ersten Mal in Listen verwenden. Mit dem *for*-Konstrukt (for var in list
) können Sie sich die einzelnen Elemente in einer Liste (oder einer anderen Sammlung) ganz einfach 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, was sich in der Liste befindet, verwenden Sie einen Variablennamen in der Schleife, der diese Informationen erfasst, z. B. „num“, „name“ oder „url“. Da Python-Code über keine andere Syntax verfügt, um Sie an Typen zu erinnern, sind Ihre Variablennamen eine wichtige Möglichkeit, um den Vorgang zu verdeutlichen. (Dies ist ein wenig irreführend. Mit zunehmender Erfahrung mit Python werden Sie Verweise auf Eingabehinweise zum Hinzufügen von Textvorschlägen zu Ihren Funktionsdefinitionen. Python verwendet diese Typhinweise bei der Ausführung nicht Ihren Programmen. Sie werden von anderen Programmen wie IDEs (integrierte Entwicklungsumgebungen) und Statische Analysetools wie Linters/Typprüfer, um zu überprüfen, ob Ihre Funktionen aufgerufen werden mit kompatiblen Argumenten.)
Das Konstrukt *in* allein ist eine einfache Möglichkeit, um zu testen, ob ein Element in einer Liste (oder einer anderen Sammlung) enthalten ist – value in collection
–, ob der Wert in der Sammlung enthalten ist, und gibt „Wahr“ oder „Falsch“ zurück.
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 also nur deren Syntax merken. Möglicherweise haben Sie Gewohnheiten aus anderen Sprachen, bei denen Sie mit der manuellen Iteration einer Sammlung beginnen, in der Sie in Python nur für und in Python verwenden sollten.
Sie können auch for/in verwenden, um an 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 range(n) liefert die Zahlen 0, 1, ... n-1 und range(a, b) gibt a, a+1, ... b-1 bis zur letzten Zahl zurück, jedoch nicht einschließlich der letzten Zahl. Mit der Kombination aus for-Schleife und range() können Sie eine traditionelle numerische For-Schleife erstellen:
## print the numbers from 0 through 99 for i in range(100): print(i)
Mit der Variante xrange() entfällt die Kosten für die Erstellung der gesamten Liste für leistungsempfindliche Fälle (in Python 3 weist „range()“ ein gutes Leistungsverhalten auf und Sie können xrange() vergessen).
Während Schleife
Python verfügt auch über die standardmäßige while-Schleife. Die Anweisungen *break* und *continue* funktionieren wie in C++ und Java und ändern den Verlauf der innersten Schleife. 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
Im Folgenden sind einige weitere gängige Auflistungsmethoden aufgeführt.
- list.append(elem) - fügt ein einzelnes Element am Ende der Liste hinzu. Häufiger Fehler: Die neue Liste wird nicht zurückgegeben, sondern nur das Original geändert.
- list.insert(index, elem) - fügt das Element am angegebenen Index ein und verschiebt die Elemente nach rechts.
- list.extend(list2) fügt die Elemente in list2 am Ende der Liste hinzu. Die Verwendung von "+" oder "+=" in einer Liste ähnelt der Verwendung von "extend()".
- list.index(elem) - sucht vom Anfang der Liste nach dem angegebenen Element und gibt deren Index zurück. Löst einen ValueError aus, wenn das Element nicht erscheint. Verwenden Sie "in", um dies ohne ValueError zu prüfen.
- list.remove(elem) - sucht nach der ersten Instanz des angegebenen Elements und entfernt es. Falls nicht vorhanden, wird ValueError ausgelöst.
- list.sort(): sortiert die Liste an der richtigen Stelle, gibt sie aber nicht zurück. (Die später gezeigte Funktion sortiert() 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 (in etwa das Gegenteil von "append()").
Beachten Sie, dass dies *Methoden* für ein Listenobjekt sind, während len() eine Funktion ist, die die Liste (oder den String oder Ähnliches) als Argument verwendet.
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äufiger 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]
Listenerstellung
Ein gängiges Muster besteht darin, eine Liste mit der leeren Liste [] zu beginnen und dann mit „append()“ oder „expand()“ Elemente hinzuzufügen:
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Segmente auflisten
Segmente funktionieren wie Strings bei Listen und können auch zum Ändern von Unterteilen der Liste verwendet werden.
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, versuchen Sie es mit den Aufgaben in list1.py, die keine Sortierung verwenden (siehe Grundlagenübungen).