Sortenreine Apfelernte in einer Apfelplantage.

Python Listen



Ideen: T. Rauschmeier, G. Kompa, Elektronikschule Tettnang
M. Brenner, J. Schnaiter, "Softwareentwicklung mit Python", ZSL Freiburg, 2024

Große Datenengen speichert man in Listen. So wie sich auf einem Feld verschiedene Apfelsorten wiederholen, wiederholen sich in Listen verschiedene Werte. Für den Zugriff verwendet man typischerweise einen Index. Mithilfe einer Schleife kann man sehr elegant auf die einzelnen Werte zugreifen.

In diesem Artikel wird der grundsätzliche Aufbau von Listen und deren Index erklärt. Mit Hilfe von foreach-Schleifen wird auf jeden einzelnen Wert zugegriffen.

Die Apfelplantage 🍎 Speichern großer Datenmengen eines Datentyps



Äpfel

Große Datenmengen speichert man in Listen. So wie sich auf einem Feld gleiche Apfelsorten wiederholen, wiederholen sich in Listen Werte gleichen oder unterschiedlichen Datentyps.

Als Beispiel soll folgende Tabelle in einer Liste gespeichert werden:
Index 0 1 2
0 Gala rot süß
1 Elstar rot fein säuerlich
2 Delicious grün süß aromatisch

Eine eindimensionale Liste legt man mit eckigen Klammern [..] an. Die Initialisierung erfolgt durch Angabe der Werte, welche durch ein Komma getrennt werden. Der Index wird automatisch zugewiesen und beginnt immer bei Null.

apfelsorte = ["Gala", "Elstar", "Delicious"]

Eine mehrdimensionale Liste hat nun je nach Verschachtelung mehrere Indizes, hier zwei. Die Indizes werden auch hier automatisch zugewiesen und beginnen immer bei Null.

apfelinfo = [
  ["Gala", "rot", "süß"],
  ["Elstar", "rot", "sauer"],
  ["Delicious", "grün", "süß"]
]

Zugriff auf Listenwerte Listen anzeigen, ändern und erweitern



Für den Zugriff auf eine Apfelsorte gibt man die entsprechenden Indizes in eckigen Klammern an:
print(f"Apfelsorte: {apfelinfo[1][0]})

Möchte man einen Wert ersetzen geht dies auch über den Index:
apfelinfo[0][0]="Boskoop"
apfelinfo[0][1]="rot"
apfelinfo[0][2]="säurebetont"

Listen erweitern:
apfelsorte = apfelsorte + ["Boskoop"]
apfelinfo = apfelinfo + [["Boskoop","rot 🍎","säurebetont"]]

Apfelinfo 🍎

Gala ist rot 🍎 und schmeckt süß.
Elstar ist rot 🍎 und schmeckt sauer.
Delicious ist grün 🍏 und schmeckt süß.

  • apple = [
      ["Gala", "rot 🍎", "süß"],
      ["Elstar", "rot 🍎", "sauer"],
      ["Delicious", "grün 🍏", "süß"]
    ]

    print(f"{apple[0][0]} ist {apple[0][1]} und schmeckt {apple[0][2]}.")
    print(f"{apple[1][0]} ist {apple[1][1]} und schmeckt {apple[1][2]}.")
    print(f"{apple[2][0]} ist {apple[2][1]} und schmeckt {apple[2][2]}.")

Apfelinfoauswahl 🍎

Elstar ist rot 🍎 und schmeckt sauer.

  • apple = [
      ["Gala","rot 🍎","süß"],
      ["Elstar", "rot 🍎", "sauer"],
      ["Delicious", "grün 🍏", "süß"]
    ]

    #Apfelinfoausgeben
    sorte = int(input("Mehr Infos zu: Gala (1), Elstar (2) Delicius (3)?"))
    print(f"{apple[sorte-1][0]} ist {apple[sorte-1][1]} und schmeckt {apple[sorte-1][2]}.")

Zugriff auf Listenwerte mit der for-Schleife automatisiert auslesen



Möchte man auf eine eindimensionale Liste zugreifen,verwendet man eine for-Schleife. Der Zugriff auf ein mehrdimensionales gelingt mit der verschachtelten for-Schleife:
for i in range(3):
  for j in range(3):
    print(apfelinfo[i][j])
  print()

Der Nachteil dieser Methode liegt darin, dass es etwas unübersichtlich ist und das die Anzahl der Einträge bekannt sein muß. Aus diesem Grund gibt es die for-each-Schleife mit der man wie folgt auf die einezlnen Elemente einer eindimensionalen Liste zugreift:
for wert in apfelsorte:
  print(f"{wert}", end=" ")

Der Zugriff auf eine mehrdimensionale Liste funktioniert über eine verschachtelte for-each-Schleife:
for row in apfelinfo:
  for data in row:
    print(f"{data:9s}", end=" ")
  print()

Preisliste 📋
Sorte Farbe Geschmack kgPreis
Gala rot 🍎 süß 2.7
Elstar rot 🍎 fein säuerlich 2.3
Delicious grün 🍏 süß 2.8
  • apfelinfo = [
      ["Gala","rot 🍎","süß", 2.7],
      ["Elstar", "rot 🍎", "sauer", 2.3],
      ["Delicious", "grün 🍏", "süß", 2.8]]

    #Preisliste ausgeben
    print("Sorte Farbe Geschmack kgPreis")
    for item in apfelinfo:
      print(f"{item[0]:10s}{item[1]:9s}{item[2]:9s}{item[3]:7.2f}")

Apfeleinkauf 🛒

Ihr Einkauf 🛒
Delicious grün 🍏 süß 2.8 €kg ⋅ 3.20 kg = 8.96 €

  • sorte = int(input("Wähle: Gala(1), Elstar(2), Delicious(3)"))
    menge = float(input("Gib die Menge ein: "))

    print(f"\nIhr Einkauf 🛒")
    for data in apple[sorte-1]:
      print(data, end = " ")
    print(f"€kg ⋅ {menge:.2f} kg = {menge*apple[sorte-1][3]:.2f} €")

Übung 1 Welche Aussage ist wahr?

Wähle die korrekten Aussagen aus.

Gegeben ist folgender Quellcode in Python:
apple = [
  ["Gala", "rot", "süß", 2.70],
  ["Elstar", "rot", "sauer", 2.30],
  ["Delicious", "grün", "süß", 2.80]
]

Greife auf die erste Apfelsorte zu.
Wähle eine Antwort.

  1. apple[1][1]
  2. apple[0][1]
  3. apple[1][0]
  4. apple[0][0]


Greife auf den Geschmack des dritten Apfels zu.
Wähle eine Antwort.

  1. apple[3][1]
  2. apple[1][3]
  3. apple[2][2]
  4. apple[3][3]



Ändere den Geschmack von Elstar auf "aromatisch".
Wähle eine Antwort.

  1. apple[1][3]="aromatisch"
  2. apple[1][4]="aromatisch"
  3. apple[1][2]="aromatisch"
  4. aromatisch"=apple[1][1]


Aktualisiere den Preis von Gala auf 1,90 €.
Wähle eine Antwort.

  1. apple[0][3]=1.9
  2. apple[1][3]=1.9
  3. app1e[1][3]=1,9
  4. apple[0][3]="1.9"


Gib die zweite Spalte aus.
Wähle eine Antwort.

  1. for item in apple:  print(item[1])
  2. for apple in item:  print(item[1])
  3. for item in apple:  print(apple[1])
  4. for apple in range:  print(range[1])


Gib die erste Zeile aus.
Wähle eine Antwort.

  1. for i in apple:  print(apple[0][i])
  2. for i in range(4):  print(apple[i][0])
  3. for i in range(4):  print(apple[0][i])
  4. for i in range(1,5):  print(apple[0][i])

Entspann dich erstmal ...



Australien ist ein Kontinent mit einer einzigartigen Fauna und Flora.

Der Elsey Nationalpark liegt im Norden Australiens und zeichnet sich durch warme Quellen und eine tolle Tiervielfalt aus.

Übung 2 Wassertemperatur

Die Wassertemperatur eines Bergsees soll über eine Woche aufgezeichnet und ausgewertet werden.

  1. Gegeben sind die ersten fünf Messwerte in einer Liste temp = [9.8, 9.2, 10.4, 7.9, 8.1]. Lege die Liste so an und ändere den dritten Eintrag auf den Wert 8.4.
  2. Der Benutzer soll zwei weitere Werte mit Hilfe einer Schleife eingeben. Ergänze die Liste entsprechend um die weiteren Werte.
  3. Lass die sieben Tageswerte mithilfe einer Schleife vom Benutzer eingeben.
  4. Realisiere die Ausgabe der eingegebenen Werte in Form einer Tabelle.
    Zusatzaufgabe: Lass dabei auch die Wochentage anzeigen.

    Speicher hierzu die Wochentage in einer weiteren Liste.

    wochentag = ["Montag", "Dienstag", "Mittwoch", ...]
    							

  5. Berechne mit Hilfe einer Schleife die durchschnittliche Wassertemperatur.
  6. Berechne den Maximalwert
  7. Berechne den Minimalwert.
Bergsee

Die Ausgabe sollte wie folgt aussehen:

Die Wassertemperarturen im Überblick:
Montag 9.8 °C
Dienstag 9.2 °C
Mittwoch 8.4 °C
Donnerstag 7.9 °C
Freitag 8.1 °C
Samstag 5.0 °C
Sonntag 6.0 °C

Auswertung: Minimum: 5.00 °C
Maximum: 9.80 °C
Average: 7.77 °C


Übung 3 Apfelernte

gefüllte Apfelkiste

  1. Entwirf ein Array mit 7 Apfelsorten, deren Farben, Geschmack und Preis pro kg.
  2. Gib die Liste als Tabelle aus.
  3. Entwirf ein Kundenformular, in welchem der Kunde die Menge jeder Sorte angeben kann und dann bestellen kann.

Übung 4 Länder und Hauptstädte

  1. Finde die Hauptstädte von 7 asiatischen Ländern, wie bspw. Kambodscha heraus und lege eine Liste mit Land, Hauptstadt, Sprache und Einwohnerzahl an.
  2. Gib alle Werte tabellarisch aus.
  3. Sortiere die Zellen nach Einwohnerzahl mit Hilfe eines Algorithmus.
Hongkong Skyline


Übung 5 Welche Aussage ist wahr?

Wähle die korrekten Aussagen aus.

Ausgabe: 1 2 3 4 5
Bestimme die zugehörige Liste.
Wähle eine Antwort.

  1. wert = [1 2 3 4 5]
  2. wert = 1,2,3,4,5;
  3. wert = [1,2,3,4,5]
  4. foreach [1,2,3,4,5]


Ausgabe: 1, 2, 3, 4, 5,
Bestimme den Quelltext für die Ausgabe.
Wähle eine Antwort.

  1. print(wert[i])
  2. for i in wert: print(wert[i], end=" ")
  3. for i in wert: print(i, end=",")
  4. for i in range(5): print(wert[i], end=", ")



Ausgabe: 5 4 3 2 1 0
Bestimme den Quelltext für die Ausgabe.
Wähle zwei Antworten.

  1. for i in range(5,-1,-1): print(wert[i],end=" ")
  2. for i in range(5,-1,1): print(wert[i],end=" ")
  3. for i in range(5,-1,-1): print(wert[i])
  4. print('5 4 3 2 1 0')


Ausgabe: A B C D
Initialisiere die Liste wert
Wähle eine Antwort.

  1. wert = ["A", "B", "C", "D"]
  2. wert = [A B C D]
  3. wert = ["A" "B" "C" "D"]
  4. wert = "A", "B", "C", "D"



List Comprehension Listen mit kurzer Syntax erzeugen



List comprehension ermöglicht eine kurze Syntax beim Erstellen einer neuen Liste, basierend auf den Werten einer vorhandenen Liste. Bspw. möchte man aus einer Liste von Zahlen, alle geraden Zahlen in eine neue Liste schreiben.
zahlen = [0, 1, 4, 6, 8, 9]
gerade = []
for x in zahlen:
  if x%2 == 0:
    gerade += [x]

Mit List Comprehension (Syntax: newlist = [expression for item in list if condition]) kann man den Quelltext in einer einzigen Zeile schreiben.
zahlen = [0, 1, 4, 6, 8, 9]
gerade = [x for x in zahlen if x%2 == 0]

Mit List Comprehension lassen sich auch neue Listen generieren.
quadrate = [x**2 for x in range(11) if x%2 == 0]

Und nocht etwas: Mit der Slice-Notation in Python (Syntax: list[<start>:<stop>:<step>]) kann man Listen (und auch Zeichenketten) filtern oder, wie im folgenden Beispiel gezeigt, deren Reiehnfolge umdrehen.
zahlenInvers= zahlen[::-1]

Liste mit Zufallszahlen

10 Zufallszahlen:
[41, 47, 94, 21, 84, 58, 34, 15, 70, 6]

  • #Listcomprehension
    import random
    zufaelligeZahlen = [random.randint(1,100) for i in range(10)]
    print(zufaelligeZahlen)

Früchteauswahl 🍎🍊🍓🍌🍉🥭
Früchteauswahl:
['Apfel 🍎', 'Mandarine 🍊', 'Erdbeere 🍓', 'Banane 🍌', 'Melone 🍉', 'Mango 🥭']
Früchte mit 'M':
['Mandarine 🍊', 'Melone 🍉', 'Mango 🥭']
  • fruechte = ["Apfel 🍎", "Mandarine 🍊", "Erdbeere 🍓", "Banane 🍌", "Melone 🍉", "Mango 🥭"]
    #Listcomprehension
    neueFruechte = [x for x in fruechte if "M" in x]

    print(f"Früchteauswahl: \n{fruechte}")
    print(f"Früchte mit 'M': \n{neueFruechte}")

Übung 6 List Comprehension

Im ertsten Teil der Aufgabe arbeiten wir mit Zahlenlisten.

  1. Erstelle mit Hilfe von List Comprehension eine Liste mit 20 zufälligen Werten
  2. Bestimme die Summe der Zahlen und den Mittelwert
  3. Sortiere die Liste aufsteigend
  4. Bestimme den Median.
  5. Erstelle eine Liste mit 10 zufälligen Zahlen die gerade sind.

    Nutze eine while Schleife mit einer verschachtelten List Comprehension. In der inneren Listn Comprehension erzeuge jeweils eine Liste mit einem Zufallswert.

    .. for wert in [random.randint(1, 100)] ..
    							

Gegeben ist folgende Liste mit Namen:
liste = ["Anna", "Berta", "Carla", "Doris", "Emilia", "Franziska", "Gabi", "Hannah", "Iris"]

  1. Gib in GROSSBUCHSTABEN alle Namen aus einer Liste aus, die länger als vier Zeichen sind.
  2. Sortiere die Liste nach Namenslänge aufsteigend.
  3. Drehe die Reihenfolge der Liste und vertausche die Buchstabenreihenfolge der einzelnen Namen mit der Slice-Notation.
  4. Erstelle eine Liste in der nur die Namen enthalten sind, welche Palindrome sind.

Die Ausgabe sollte wie folgt aussehen:

Zahlenliste:
[8, 7, 10, 10, 3, 9, 7, 3, 1, 3, 7, 3, 6, 9, 3, 4, 7, 8, 9, 9]
Summe der Zahlen: 126
Mittelwert der Zahlen: 6.3

sortierte Zahlenliste:
[1, 3, 3, 3, 3, 3, 4, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10]
Median: 7.0

Zahlenliste mit 10 zufälligen geraden Zahlen:
[52, 10, 46, 92, 38, 30, 82, 52, 46, 96]

Namenslisten:
['BERTA', 'CARLA', 'DORIS', 'EMILIA', 'FRANZISKA', 'HANNAH']
['FRANZISKA', 'EMILIA', 'HANNAH', 'BERTA', 'CARLA', 'DORIS']
['SIROD', 'ALRAC', 'ATREB', 'HANNAH', 'AILIME', 'AKSIZNARF']
['ANNA', 'HANNAH']


Wortliste und Satzbausteine



die Liste, -n Speicher für beliebige Anzahl an Werte mit beliebigem Datentyp
liste = ["Cola", 1, 2.3, True]
der Index, Indizes Wert mit dem auf einzelne Listenemente zugegriffen wird.
die for-Schleife, -n eine Anweisung zum Wiederholen von Programmteilen
for i in range (4): print(liste[i])
die foreach-Schleife, -n Schleife um alle Elemente eines Arrays auszugeben
for item in liste: print(item)