Python-Listen

Python verfügt über einen hervorragenden integrierten Listentyp namens "list". Listenliterale werden in eckigen Klammern [ ] geschrieben. Listen funktionieren ähnlich wie Zeichenfolgen. Verwenden Sie die Funktion „len()“ und eckige Klammern [ ], um auf Daten zuzugreifen, wobei sich das erste Element an Index 0 befindet. Weitere Informationen finden Sie in der offiziellen Dokumentation zu python.org.

  colors = ['red', 'blue', 'green']
  print(colors[0])    ## red
  print(colors[2])    ## green
  print(len(colors))  ## 3

Liste der Strings "rot" "blau "grün"

Bei einer Aufgabe mit einem „=“ auf Listen wird keine Kopie erstellt. Stattdessen weisen die beiden Variablen durch die Zuweisung auf die eine Liste im Speicher hin.

  b = colors   ## Does not copy the list

und b auf die eine Liste verweisen,

Die "leere Liste" ist nur ein leeres Paar Klammern [ ]. Das '+' dient zum Anhängen von zwei Listen, sodass [1, 2] + [3, 4] zu [1, 2, 3, 4] führt (genau wie + mit Zeichenfolgen).

FOR und IN

Die Konstrukte *for* und *in* von Python sind äußerst nützlich, und wir werden sie zum ersten Mal mit Listen verwenden. Das *for*-Konstrukt (for var in list) ist eine einfache Möglichkeit, die einzelnen Elemente in einer Liste oder einer anderen Sammlung zu betrachten. Fügen Sie sie während der Iteration nicht zur Liste hinzu oder entfernen Sie sie nicht aus der Liste.

  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 keine andere Syntax hat, die Sie an Typen erinnert, sind Ihre Variablennamen eine wichtige Möglichkeit, um den Überblick zu behalten. (Das ist etwas irreführend. Mit zunehmender Erfahrung mit Python sehen Sie Verweise auf Typhinweise, mit denen Sie Ihren Funktionsdefinitionen Typinformationen 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 statischen Analysetools wie Linter/Typprüfungen verwendet, um zu prüfen, ob Ihre Funktionen mit kompatiblen Argumenten aufgerufen werden.

Das *in*-Konstrukt allein ist eine einfache Möglichkeit zu testen, ob ein Element in einer Liste oder einer anderen Sammlung enthalten ist (value in collection). Damit wird getestet, ob sich der Wert in der Sammlung befindet, und gibt „True“ oder „False“ zurück.

  list = ['larry', 'curly', 'moe']
  if 'curly' in list:
    print('yay') ## yay

Die for/in-Konstrukte werden sehr häufig in Python-Code verwendet und funktionieren mit anderen Datentypen als Listen. Sie sollten sich also einfach ihre Syntax merken. Vielleicht haben Sie in anderen Sprachen Gewohnheiten, bei denen Sie mit der manuellen Iteration über eine Sammlung beginnen. In Python sollten Sie nur für/in verwenden.

Sie können auch for/in verwenden, um an einem String zu arbeiten. Der String fungiert als eine Liste seiner Zeichen, sodass for ch in s: print(ch) alle Zeichen in einem String ausgibt.

Bereich

Die Funktion range(n) liefert die Zahlen 0, 1, ... n-1 und range(a, b) gibt a, a+1, ... b-1 zurück, jedoch bis zur letzten Zahl. Mit der Kombination aus for-loop und 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 von xrange(), mit der die Kosten für das Erstellen der gesamten Liste für leistungskritische Fälle vermieden werden (in Python 3 hat range() ein gutes Leistungsverhalten und Sie können xrange() vergessen).

Während Schleife

Python verfügt auch über die Standard-while-loop und die *break*- und *continue*-Anweisungen funktionieren wie in C++ und Java und ändern den Verlauf der innersten Schleife. Die oben beschriebenen for/in-Schleifen lösen den häufigen Fall der Iteration über jedes Element in einer Liste, aber die while-Schleife gibt Ihnen 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 finden Sie einige weitere gängige Listenmethoden.

  • list.append(elem) – fügt ein einzelnes Element am Ende der Liste hinzu. Häufiger Fehler: Es wird keine neue Liste zurückgegeben, sondern nur das Original geändert.
  • list.insert(index, elem) – fügt das Element beim 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 Erweitern().
  • list.index(elem) - sucht vom Anfang der Liste nach dem angegebenen Element und gibt dessen Index zurück. Löst einen ValueError aus, wenn das Element nicht angezeigt wird. Verwenden Sie "in" für die Prüfung ohne ValueError.
  • list.remove(elem): sucht nach der ersten Instanz des angegebenen Elements und entfernt sie. Falls nicht vorhanden, wird ValueError ausgelöst.
  • list.sort(): sortiert die Liste an derselben Stelle (gibt sie nicht zurück). (Die Funktion sort(), die später zu sehen ist, wird bevorzugt.)
  • list.reverse() - kehrt die vorhandene Liste um (gibt sie nicht zurück)
  • list.pop(index) - entfernt das Element und gibt es beim angegebenen Index zurück. Gibt das Element ganz rechts zurück, wenn der Index weggelassen wird (ungefähr das Gegenteil von „append()“).

Beachten Sie, dass es sich hierbei um *methods* für ein Listenobjekt handelt, während „len()“ eine Funktion ist, die die Liste (oder eine Zeichenfolge oder etwas anderes) als Argument annimmt.

  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 nur 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 starten und dann mithilfe von Anfüg() oder Erweitern() 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 in 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, bei denen keine Sortierung verwendet wird (unter Grundlagen).