Listen von Listen (2D)
Informatik · Python · Klassen 10–13 · PRIMM-Methode
🎯 Worum geht's? Klasse 10–13 · 2 Unterrichtsstunden
Nach dieser Seite kannst du …
- eine Liste von Listen anlegen und ihre Zeilen- und Spaltenzahl bestimmen
- mit
m[zeile][spalte]auf einzelne Felder zugreifen - vorhersagen, in welcher Reihenfolge verschachtelte Schleifen die Felder besuchen
- Summen, Maximum, Diagonalen und das Transponieren selbst programmieren
- typische Indexfehler finden und beheben
Vorwissen: Listen und for-Schleifen in Python
📝 Aufgaben
Jede Aufgabe hat fünf Schritte: Predict › Run › Investigate › Modify › Make. Wähle eine Aufgabe aus – oder nutze oben die Leiste „Aufgaben: 1, 2, 3 …“.
📐 Das Wichtigste in Kürze
Eine Liste von Listen ist wie eine Tabelle: jede innere Liste ist eine Zeile.
| Spalte 0 | Spalte 1 | Spalte 2 | |
|---|---|---|---|
| Zeile 0 | 1 | 2 | 3 |
| Zeile 1 | 4 | 5 | 6 |
m = [[1, 2, 3], [4, 5, 6]];m[1][2]ist6.len(m)= Anzahl der Zeilen,len(m[0])= Länge der ersten Zeile.- Leere 3 × 4-Tabelle:
[[0] * 4 for _ in range(3)]– nicht[[0] * 4] * 3(dann wären alle Zeilen dieselbe Liste!).
🏅 Zuletzt verdiente Badges
Lies den Code und sage die Ausgaben voraus.
Was gibt Zeile 2 aus?
Was gibt Zeile 3 aus?
Was gibt Zeile 5 aus?
len(m) zählt die inneren Listen (Zeilen), len(m[0]) die Werte der ersten Zeile.Trage Zeilen, Spalten und Felder insgesamt ein.
| Liste | Zeilen | Spalten | Felder |
|---|---|---|---|
[[0] * 5 for _ in range(2)] | |||
[[7, 8, 9]] | |||
[[1], [2], [3], [4]] |
Was liefert len(m) bei einer Liste von Listen?
Was ist an [[0] * 4] * 3 problematisch?
Ein Stundenplan soll 5 Tage (Zeilen) mit je 6 Stunden (Spalten) haben. Passe die Zeile an.
[0] * s erzeugt eine Zeile mit s Werten; range(z) legt fest, wie viele Zeilen entstehen.Schreibe anzahl_felder(m): die Zahl aller Felder (alle Zeilen gleich lang).
Eine leere Tabelle wird teilweise belegt.
Was wird ausgegeben?
t[1][0] bekommt den Wert von t[0][1] plus 1.Trage ein, was am Ende in jedem Feld steht.
| Spalte 0 | Spalte 1 | Spalte 2 | |
|---|---|---|---|
| Zeile 0 | |||
| Zeile 1 |
Welches Feld ist t[1][2]?
Was ergibt t[-1][-1]?
Die letzte Zeile soll das Feld unten rechts auf 9 setzen, erzeugt aber einen Fehler. Korrigiere sie.
Schreibe setze_ecken(m, wert): Sie setzt alle vier Eckfelder auf wert – für Tabellen jeder Größe.
len(m) - 1, letzte Spalte: len(m[0]) - 1. Welche vier Kombinationen ergeben die Ecken?Zwei Schleifen geben die Tabelle aus.
Wie oft wird Zeile 5 ausgeführt?
Was steht in der ersten Ausgabezeile?
print() beginnt eine neue Zeile.Trage für jeden Durchlauf der inneren Schleife z, s und den Wert ein.
| Durchlauf | z | s | m[z][s] |
|---|---|---|---|
| 1 | 0 | 0 | 1 |
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 |
z um 1 steigt.Welche Laufvariable ändert sich häufiger?
Was bewirkt end=" " in print?
Gib die Tabelle spaltenweise aus: zuerst 1 4, dann 2 5, dann 3 6 – je Spalte eine Zeile.
Schreibe zaehle_groesser(m, grenze): Wie viele Werte sind größer als grenze?
Die Schleife addiert die Werte einer Zeile.
Wie oft läuft die Schleife?
Was wird ausgegeben?
p[1] ist die Zeile [1, 5, 9].Berechne für p alle Zeilensummen, Spaltensummen und die Gesamtsumme.
| Spalte 0 | Spalte 1 | Spalte 2 | Zeilensumme | |
|---|---|---|---|---|
| Zeile 0 | 3 | 1 | 4 | |
| Zeile 1 | 1 | 5 | 9 | |
| Zeile 2 | 2 | 6 | 5 | |
| Spaltensumme |
Welcher Index bleibt bei einer Spaltensumme gleich?
Jede Zeilensumme soll einzeln ausgegeben werden. Wo muss summe = 0 stehen?
Ändere den Code so, dass er die Summe der Spalte 2 berechnet (Ergebnis 18).
Schreibe zeilensummen(m): eine Liste mit der Summe jeder Zeile (ohne sum).
Der Code sucht den größten Wert und merkt sich, wo er steht.
Welchen Wert hat groesster am Ende?
Welche Position wird gespeichert?
> ersetzt nur ein größerer Wert das bisherige Maximum.Derselbe Code läuft mit w = [[5, 3], [6, 6], [2, 8]]. Trage nach jedem Durchlauf die drei Werte ein.
z | s | w[z][s] | groesster | zeile | spalte |
|---|---|---|---|---|---|
| 0 | 0 | 5 | 5 | 0 | 0 |
| 0 | 1 | 3 | |||
| 1 | 0 | 6 | |||
| 1 | 1 | 6 | |||
| 2 | 0 | 2 | |||
| 2 | 1 | 8 |
Warum startet groesster mit w[0][0] statt mit 0?
Was ändert sich im Predict-Beispiel mit >= statt >?
Ändere den Code so, dass er das Minimum und seine Position findet (für die Predict-Werte: 2 in Zeile 0, Spalte 2).
Schreibe enthaelt(m, x): True, wenn x irgendwo vorkommt (ohne in auf Zeilen).
True zurückgeben. Wann weißt du sicher, dass x nicht vorkommt?In einer quadratischen Tabelle liegen q[0][0], q[1][1], … auf der Hauptdiagonale.
Welche Felder werden addiert?
Was wird ausgegeben?
Für dieselbe Tabelle wird die Nebendiagonale (rechts oben nach links unten) addiert.
i | Spaltenindex | Wert | n danach |
|---|---|---|---|
| 0 | |||
| 1 | |||
| 2 |
len(q) - 1 - i läuft 2, 1, 0.Warum reicht für die Hauptdiagonale eine Schleife?
Bei welcher Tabelle löst q[i][i] mit i bis len(q) - 1 einen Fehler aus?
Ändere den Code so, dass er alle Werte oberhalb der Hauptdiagonale addiert: 2 + 3 + 6 = 11.
Schreibe ist_einheitsmatrix(m): True, wenn auf der Hauptdiagonale nur 1 und sonst überall 0 steht.
z == s) muss 1 stehen, sonst 0. Schon eine Abweichung genügt für False.Beim Transponieren werden Zeilen zu Spalten.
Wie viele Zeilen hat t?
Welchen Wert hat t[0][1]?
Welchen Wert hat t[2][1]?
t[s][z] = a[z][s]: Zeile und Spalte tauschen die Rollen.Trage ein, was am Ende in t steht.
| Spalte 0 | Spalte 1 | |
|---|---|---|
| Zeile 0 | ||
| Zeile 1 | ||
| Zeile 2 |
a wird zur ersten Spalte von t.Warum hat t len(a[0]) Zeilen?
Was passiert bei b = a und danach b[0][0] = 99?
Ändere den Code so, dass t eine gespiegelte Kopie von a wird: jede Zeile rückwärts, also [[3, 2, 1], [6, 5, 4]].
t hat jetzt dieselbe Größe wie a. In welche Spalte von t gehört a[z][s]?Schreibe kopiere(m): eine echte Kopie – neue Zeilen mit denselben Werten.
return m nicht?Die Zeilen einer Liste von Listen dürfen verschieden lang sein.
Was gibt Zeile 4 aus?
Was gibt Zeile 5 aus?
Was passiert in Zeile 6?
Trage den Wert ein – oder Fehler, wenn der Zugriff einen IndexError auslöst.
| Ausdruck | Wert oder „Fehler“ |
|---|---|
len(r) | |
r[1][2] | |
len(r[2]) | |
r[0][1] + r[1][0] | |
r[3][0] | |
r[-1][0] |
r hat 3 Zeilen mit 2, 3 und 1 Werten. Negative Indizes zählen von hinten.Warum ist for s in range(len(r[z])) besser als range(len(r[0]))?
Was ist an for z in range(len(m) + 1): falsch?
Der Code soll alle Werte addieren (Ergebnis 21), enthält aber drei Fehler. Korrigiere sie.
Schreibe laengste_zeile(m): den Index der längsten Zeile (ohne max).
🏅 Deine Badges
Verdiente Badges leuchten auf.
📊 Statistik
↺ Zurücksetzen
Alle gespeicherten Daten werden gelöscht.
📄 Arbeitsblatt erstellen
Wähle aus, welche Bereiche auf das Arbeitsblatt kommen. Es enthält dann alle … Aufgaben dieser Seite aus diesen Bereichen – mit Kästchen zum Ankreuzen, leeren Tabellen und Platz zum Schreiben, ohne Lösungen und Tipps.