Eine Liste ist ein sogenannter «zusammengesetzter» Datentyp. Sie besteht nämlich aus mehreren einfachen oder zusammengesetzten Datentypen. Es gibt Listen von Zahlen, von Strings. Es sind auch gemischte Listen und Listen von Listen möglich.

liste = [True, "Hallo Welt", "Hello World", 12, 3.1]

for item in liste:
    print(item)
1
2
3
4

Liste definieren

Python erkennt Listen an Hand der eckigen Klammern. Vorgegebene Werte werden duch Kommas getrennt. Die Liste kann aber auch leer sein.

wochentage = ["Mo", "Di", "Mi"]  # Liste mit 3 Elementen
monate = ["Januar"]              # Liste mit einem Elemente
jahre = []                       # leere Liste
1
2
3

Länge der Liste

Mit len(list) erhält man die Anzahl Elemente der Liste list.

for-in-Schleife

Mit der for-in-Schleife können wir alle Elemente einer List durchlaufen.


 


monate = ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul"]
for monat in monate:
    print(monat)
1
2
3
Zeile 2
«Für jeden Monat in der Liste Monate»
monat ist der Name, mit welchem wir das Element in der Schleife ansprechen können
Zeile 3
wird für jedes Element ausgeführt, wobei der Wert von monat natürlich immer ändert

Aufgabe: Notendurchschnitt

Berechne den Notendurchschnitt mit der gegebenen Vorlage:

noten = [4.5, 5.5, 6, 4.75]
1
Lösung: Notendurchschnitt
noten = [4.5, 5.5, 6, 4.75]
summe = 0
for note in noten:
    summe = summe + note

durchschnitt = summe/len(noten)
1
2
3
4
5
6

Zusatzaufgabe: Durchschnitt allgemein

Schreibe ein Unterprogramm durchschnitt(), das als Argument eine Liste erhält, den Durchschnitt dieser berechnet und das Ergebnis zurückliefert.

Lösung: Durchschnitt allgemein
def durchschnitt(liste):
    summe = 0
    for element in liste:
        summe = summe + element

    return(summe/len(noten))

noten = [4.5, 5.5, 6, 4.75]
print("Zeugnis:", durchschnitt(noten))
print("Würfel:", durchschnitt([1,5,2,6]))
1
2
3
4
5
6
7
8
9
10

Elemente hinzufügen

Mit der Methode append() kann der Liste ein Element hinzugefügt werden

wochentage = ["Mo", "Di", "Mi"]
wochentage.append("Do")
1
2

Aufgabe: Fibonacci-Folge als Liste

Wir erstellen nochmals eine Fibonacci-Folge (die ersten 100 Elemente). Diese soll aber als Liste komplett gespeichert und erst am Schluss ausgegeben werden:

fibonacci = [0,1]

# fibonacci-folge berechnen

print(fibonacci)
print(len(fibonacci))
1
2
3
4
5
6
Lösung: Fibonacci-Folge als Liste
fibonacci = [0,1]

i = 2
while i < 100:
    next_item = fibonacci[i-2] + fibonacci[i-1]
    fibonacci.append(next_item)
    i = i + 1

print(fibonacci)
print(len(fibonacci))
1
2
3
4
5
6
7
8
9
10

Dank der negativen Indizes kann auf die Zählvariable verichtet werden:

fibonacci = [0,1]

while len(fibonacci) < 100:
    next_item = fibonacci[-2] + fibonacci[-1]
    fibonacci.append(next_item)
    
print(fibonacci)
print(len(fibonacci))
1
2
3
4
5
6
7
8

Elemente entfernen

Mit der Methode remove() kann ein Element von der Liste entfernt werden

wochentage = ["Mo", "Di", "Mi"]
wochentage.remove("Mi")
1
2

Überprüfen ob in Liste

Mit in und not in lässt sich überprüfen, ob ein Wert in einer Liste vorkommt oder eben nicht:


 

 


wochentage = ["Mo", "Di", "Mi"]
if "Mo" in wochentage:
    print("Der Montag ist ein Wochentag")
if "Do" not in wochentage:
    print("Der Donnerstag ist kein Wochentag")
1
2
3
4
5

Aufgabe: Textanalyse

Wir versuchen einen Text zu analysieren. Dazu berechnen wir die Anzahl verschiedener Buchstaben die darin vorkommen.

Programmiere so ein Analyse-Unterprogramm:

  • als Argument erhält es einen Text (kann eingegeben werden)
  • als Rückgabewert wird eine Liste der einzelnen Buchstabe zurückgeliefert
  • Siehe auch den folgenden Tipp «String als Liste»

Mögliche Erweiterungen:

  • ignoriere Gross-/Kleinschreibung. Verwende dazu die Methode lower() oder upper()
  • beschränke dich auf Buchstaben. Verwende dazu die String-Methode isalpha()
  • Sortiere die Liste alphabetisch, bevor du sie im Unterprogramm. Verwende dazu das Unterprogramm sorted()
Lösung: Textanalyse

ohne Erweiterungen:

def textanalyse(text):
    buchstaben = []
    for zeichen in text:
        if zeichen not in buchstaben:
            buchstaben.append(zeichen)
    return buchstaben

resultat = textanalyse("The quick brown fox jumps over the lazy dog")
print(resultat)
print(len(resultat))
1
2
3
4
5
6
7
8
9
10

mit den Erweiterungen:

def textanalyse(text):
    buchstaben = []
    for zeichen in text:
        zeichen_klein = zeichen.lower()
        if zeichen_klein.isalpha() and zeichen_klein not in buchstaben:
            buchstaben.append(zeichen_klein)
    return sorted(buchstaben)

resultat = textanalyse("The quick brown fox jumps over the lazy dog")
print(resultat)
print(len(resultat))
1
2
3
4
5
6
7
8
9
10
11

Tipp: String als Liste

Strings können in Python als eine Art Liste (Liste von Zeichen) angeschaut werden. So kann z.B. die Länge eines Strings mit len berechnet werden. Auch die for in-Schleife funktioniert mit Strings:

text = "Hallo Welt"

for zeichen in text:
    print(zeichen)
1
2
3
4

Auf einzelne Elemente zugreifen

Möchte man auf einzelne Elemente der Liste zugreifen, so schreibt man den Namen der Liste und hängt in eckiger Klammer den Index (sozusagen die Position) des gewünschten Elementes an.

wochentage = ["Mo", "Di", "Mi"]
erster_wochentag = wochentage[0]
wochentage[2] = "Mittwoch"
letzter_wochentag = wochentage[-1]
print("Die Woche beginnt am", erster_wochentag)
print("und endet am", letzter_wochentag)
1
2
3
4
5
6

Hinweis

  • Das erste Element hat den Index 0!
  • Mit negativen Werten wird die Position von hinten angegeben

Teillisten

Mit der eckigen Klammer kann auch eine Teilliste extrahiert werden. Dabei geben wir zwei Indizes an, die durch einen Doppelpunkt getrennt sind. Man kann einen der beiden Indizes auch weglassen. Dann beginnt die Liste beim ersten Element, resp. sie endet beim Letzten. Die Indizes können auch negativ sein.

monate = ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul"]
fruehling = monate[2:5]
jahresbeginn = monate[0:2]
jahresende = monate[-2:]
1
2
3
4

weitere Aufgaben

Aufgabe: Taschenrechner

Schreibe ein Programm, das Eingaben wie z.B. 12 + 12, oder 3 * 4 - 5 verarbeiten und auswerten kann. Einige Tipps:

  • Mit str.split() kann man einen String str bei den Leerschlägen zerschneiden und die Stücke in eine Liste packen
  • mit str.isdigit() kann erkannt werden, ob der String str eine Zahl darstellt oder nicht
  • mit float(str) oder int(str) kann der String str in eine Zahl umgewandelt werden (kann einen Error geben!)
Lösung: Taschenrechner
def calculate(ausdruck):
    print("berechne:", ausdruck)
    
    result = False
    operator = ""
    operand = 0.0
    
    for item in ausdruck.split():
        print(item)
        if not result:     # first number
            result = float(item)
        elif item.isdigit():
            operand = float(item)
            if operator == "+":
                result = result + operand
            if operator == "-":
                result = result - operand
            if operator == "*":
                result = result * operand
            if operator == "/":
                result = result / operand
        else:
            operator = item
    
    print(result)
    return result

calculate("12 * 2 - 12")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

Zusatzaufgabe: Taschenrechner+

Versuche den Taschenrechner schrittweise zu erweitern:

  • Punkt-vor-Strich-Regel wird befolgt
  • Leerschläge können weggelassen werden
  • geklammerte Ausdrücke werden zuerst berechnet