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)
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
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)
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]
«Notendurchschnitt»
noten = [4.5, 5.5, 6, 4.75]
summe = 0
for note in noten:
summe = summe + note
durchschnitt = summe/len(noten)
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.
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]))
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")
2
«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))
2
3
4
5
6
«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))
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))
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")
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")
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()
oderupper()
- beschränke dich auf Buchstaben. Verwende dazu die String-Methode
isalpha()
(opens new window) - Sortiere die Liste alphabetisch, bevor du sie im Unterprogramm. Verwende dazu das Unterprogramm
sorted()
(opens new window)
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))
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))
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)
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)
2
3
4
5
6
Hinweis
- Das erste Element hat den Index 0!
- Mit negativen Werten wird die Position von hinten angegeben
Zusatzaufgabe «Textanalyse 2»
Spannend wäre ja nicht nur zu wissen, welche Buchstaben in einem Text vorkommen, sondern auch ihre Häufigkeit. Wie könnte man dies erreichen?
# 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:]
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 Stringstr
bei den Leerschlägen zerschneiden und die Stücke in eine Liste packen - mit
str.isdigit()
kann erkannt werden, ob der Stringstr
eine Zahl darstellt oder nicht - mit
float(str)
oderint(str)
kann der Stringstr
in eine Zahl umgewandelt werden (kann einen Error geben!)
Zusatzaufgabe «Taschenrechner 2»
Versuche den Taschenrechner schrittweise zu erweitern:
- Punkt-vor-Strich-Regel wird befolgt
- Leerschläge können weggelassen werden
- geklammerte Ausdrücke werden zuerst berechnetf