Python-Listen

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

Liste der Zeichenfolgen 'red' 'blau 'grün'

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

beide Farben und b zeigen
auf die eine Liste,

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).