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)
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 Element
jahre = [] # leere Liste
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)
- 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]
Lösung: Notendurchschnitt
noten = [4.5, 5.5, 6, 4.75]
summe = 0
for note in noten:
summe = summe + note
durchschnitt = summe/len(noten)
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]))
Elemente hinzufügen
Mit der Methode append()
kann der Liste ein Element hinzugefügt werden
wochentage = ["Mo", "Di", "Mi"]
wochentage.append("Do")
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))
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))
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))
Elemente entfernen
Mit der Methode remove()
kann ein Element von der Liste entfernt werden
wochentage = ["Mo", "Di", "Mi"]
wochentage.remove("Mi")
Ü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")
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:
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))
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))
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)
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)
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:]
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!)
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")
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
- …