archiv:gf:gf2020_2021:python:listen

Listen in Python

Bisher haben wir in Variablen verschiedene Typen von Daten gespeichert. Z.B. eine ganze Zahl, eine Fliesskommazahl, einen Text, oder einfach einen boolschen Wert (true/false). In einer Liste können wir nun eine ganze Reihe von solchen Daten speichern.

Dies ist vor allem dann sinnvoll, wenn wir mehrere ähnliche oder zusammengehörende Daten speichern wollen und wenn die Anzahl dieser Daten variieren kann. Wollen wir z.B. ein Spiel programmieren, in dem nach und nach neue Gegner auf dem Bildschirm erscheinen und wieder verschwinden, so können wir diese nicht gut mit Variablen beschreiben, da wir nicht wissen, wie viele es genau sein werden etc. Besser geeignet ist in so einem Fall eine Liste. In diese können wir beliebig neue Elemente hinzufügen bzw. wieder entfernen. Die Länge der Liste (d.h. die Anzahl der Elemente) kann variieren.

Listen werden durch eckige Klammern repräsentiert. Wir definieren unten drei Listen und speichern diese in den Variablen L1, L2 und L3:

L1 = [1,45,3,5]
L2 = ["eine Liste","mit verschiedenen Daten",4,True]
L3 = [[3,5],[4,6],[2,7],[1,6]] # eine Liste aus Listen (z.B. Koordinaten)

Wie man erkennt, können in einer Liste unterschiedliche Typen von Daten gespeichert werden. Eine Liste kann sogar verschachtelt sein, d.h. sie kann sogar selbst wieder Listen bestehen.

Häufig will man eine gleichmässige Liste aus Zahlen erstellen. Z.B. alle Zahlen von 1 bis 20, oder alle geraden Zahlen zwischen 1 bis 30 etc. Hier ist der range-Befehl sehr praktisch.

Hierbei gibt man die Startzahl die Endzahl und die Schrittweite an. Gibt man keine Schrittweite an, so wird 1 gewählt:

range(1,10) # Alle Zahlen von 1 bis 9, also [1,2,3,4,5,6,7,8,9]
range(1,20,2) # Alle Zahlen von 1 bis 19 mit Abstand 2, also [1,3,5,7,9,...,19]
range(36,12,-3) # Alle Zahlen von 36 bis 13 mit Abstand -3 also [36,33,30,...,15]

Merke: Die Endzahl gehört jeweils nicht mehr zur Liste.

Man will sehr häufig alle Elemente einer Liste durchgehen und irgendetwas damit machen. Z.B. alle Elemente der Liste am Bildschirm hinschreiben. Dafür gibt es in Python einen speziellen for-Befehl:

l1 = [1,3,6,7,88,456]
for i in l1:
   print(i)

Sehr häufig wird die Liste erst gerade im for-in-Befehl erzeugt, so wie hier:

for i in range(1,20,3):
   print(i)
# Die Zahlen 1,4,7,10,13,17 werden ausgegeben

Man kann auf die Elemente der Liste zugreifen, indem man wieder eckige Klammern verwendet:

l1 = [1,4,5,6,7]
print(l1[1]) #->4

Merke: Der Index läuft von 0 bis zur Länge der Liste minus 1. D.h. das erste element ist nicht l1[1], sondern l1[0]. l1[-1] ist das letzte Element der Liste.

Eine Unterliste extrahieren

Man kann aus einer Liste mit dem Doppelpunkt eine Unterliste herausfiltern:

l1=[2,5,7,9,11,14,23]
l2 = l1[1:5] 
#l2 ist nun [7,9,11], d.h. die Unterliste von Index 2 bis 5 (ohne Index 5)
 
l3 = l1[4:]
#l3 ist die Liste ab dem vierten Index bis zum Schluss

Löschen eines Elements Man kann das erste Vorkommen eines bestimmten Wertes löschen mit remove():

l1=[1,3,66,34]
l1.remove(66)
# l1 ist nun nur noch [1,3,34]

Will man ein Element bei einem bestimmten Index löschen (z.B. das fünfte Element), so verwendet man del:

l1=[1,2,3,4,5]
del l1[2]
#l1 ist nun nur noch [1,2,4,5]

Hinzufügen mit append() oder insert()

l1 = [1,2,3,4]
l1.append(55) # append fügt ein Element am Schluss hinzu
l1.instert(4,77) # fügt die Zahl 77 beim Index 4 hinzu

Listen verbinden

l1 = [1,2,3]
l2 = [4,5,6]
l3 = l1 + l2 # l3 ist [1,2,3,4,5,6]
  1. Definiere eine Funktion minimum(L), welche eine Liste L als Argument übernimmt und dann das kleinste Element der Liste findet und zurückgibgt.
  2. Definiere eine Funktion durchschnitt(L), welche von einer Liste den Durchschnitt berechnet.
  3. Definiere eine Funktion abstand(L), welche den Abstand des Kleinsten von Grössten Element der Liste bestimmt.
  4. (*) Versuche eine Funktion sortiere(L) zu definieren, welche die Liste sortiert. Welche Ideen hast du?
def myfunction(list1):
    res = 0
    for i in range(len(list1)):
        for j in range(len(list1)):
            if list1[i] * list1[j] > 10:
                res = res + 1
    return res
 
 
print myfunction([1,5,3])
  • archiv/gf/gf2020_2021/python/listen.txt
  • Zuletzt geändert: 2022/08/27 18:08
  • von lehmannr