Direkt zum Inhalt

BPE 7 · J2

Arrays und indizierte Folgen

Du ordnest Werte nach Positionen und bearbeitest sie sicher über ihren Index. Python-Listen dienen dabei als praktische Übungsdarstellung.

Bildungsplanbezug: BPE 7.1 · interne Lerneinheit 7.1.1

Geschätzte Lernzeit: 55 Minuten

Noch nicht begonnen

Das kannst du danach

  • Index und gespeicherten Wert unterscheiden
  • Gültige Indexgrenzen bestimmen
  • Werte lesen, ersetzen und tauschen
  • Array-Modell, Python-Liste, Referenz und Kopie unterscheiden

Verständlich erklärt

Ein Array fasst im hier verwendeten Grundmodell eine feste Anzahl gleichartig typisierter Elemente zusammen, die über ihre Position angesprochen werden. Wir zählen ab 0: Bei Länge n lauten die Indizes 0 bis n−1; bei Länge 0 existiert kein gültiger Index. Ein Index ist eine Position, nicht der dort gespeicherte Wert.

Python-Listen stellen in diesem Kurs die Folge dar, sind aber keine solchen festen Arrays: Ihre Länge kann sich ändern, sie enthalten Referenzen auf Objekte und dürfen unterschiedliche Objekttypen enthalten. Deklaration bedeutet, einen Namen mit gegebenenfalls einem Typ bekannt zu machen; Initialisierung setzt Anfangswerte. In Python ist keine separate Typdeklaration nötig: a = [3, 5] bindet den Namen an eine mit Startwerten erzeugte Liste. [0] * n initialisiert n Plätze mit 0; die Liste bleibt technisch dynamisch. Unsere Aufgaben verwenden jeweils passend gewählte einheitliche Werte. a[i] liest ein Element, a[i] = neu ersetzt es, ohne die Länge zu ändern. len(a) gibt die Länge zurück; range(len(a)) liefert genau die nichtnegativen Indizes. Python erlaubt auch negative Indizes, doch unsere Aufgaben zum Array-Modell verlangen ausdrücklich 0 ≤ i < len(a).

b = a erstellt keine Kopie: Beide Namen bezeichnen dieselbe Liste. b = a.copy() erzeugt eine neue äußere Liste; bei unseren Zahlenlisten genügt das für unabhängige Elementersetzungen. Enthielte die Liste verschachtelte veränderliche Objekte, wären diese weiterhin gemeinsam referenziert. Zum Tauschen muss der alte Wert erhalten bleiben, etwa mit einer Hilfsvariablen oder mit a[i], a[j] = a[j], a[i]. Funktionen mit dem Auftrag „neue Liste“ dürfen die Eingabe nicht verändern. Mit append(wert) fügst du einer neu erzeugten Python-Ergebnisliste ein Element hinzu.

  • Array
  • Deklaration
  • Initialisierung
  • Element
  • Index
  • Länge
  • Indexgrenze
  • Referenz
  • Kopie

Beispiel

anzahl = 3
nullen = [0] * anzahl     # Initialisierung: [0, 0, 0]
werte = [12, 7, 19]       # Name an Liste mit Startwerten binden
# Index:  0  1   2
werte[1] = 8              # [12, 8, 19]
kopie = werte.copy()
kopie[0], kopie[2] = kopie[2], kopie[0]
# kopie: [19, 8, 12]; werte bleibt [12, 8, 19]
for i in range(len(werte)):
    print(i, werte[i])

Typische Fehler

  • Das erste Element an Index 1 suchen
  • len(a) selbst als gültigen Index verwenden
  • b = a für eine unabhängige Kopie halten
  • Beim Tauschen einen alten Wert vorzeitig überschreiben

Kurz zusammengefasst

Prüfe vor jedem Zugriff die Position. Python-Listen machen Array-Algorithmen ausführbar, haben aber zusätzliche Eigenschaften wie dynamische Länge und gemeinsame Referenzen.

Abi-Bezug

Beschreibe Indexbereich und Zustandsänderungen präzise. Unterscheide die abstrakte Datenstruktur von der konkreten Python-Darstellung.

Jetzt selbst ausprobieren

Prüfe deine Lösung automatisch. Bei Bedarf helfen dir ein Tipp und anschließend die Musterlösung.

BPE 7J21 Punkteleicht

Array-Modell und Python-Liste

Noch nicht begonnen

Aufgabenstellung

Welche Aussagen passen zu unserer Unterscheidung zwischen dem klassischen Array-Grundmodell und einer Python-Liste? Wähle alle richtigen Antworten.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Trenne die modellierte Datenstruktur von der konkreten Übungssprache.
  2. append verändert die Listenlänge; ein Index beginnt trotzdem bei 0.
Lösung anzeigen
Das Array-Grundmodell hat eine feste Anzahl gleichartig typisierter Elemente. Python-Listen sind dynamisch und beginnen wie unser Array-Modell bei Index 0.
BPE 7J21 Punkteleicht

Der letzte gültige Index

Noch nicht begonnen

Aufgabenstellung

Die Folge [11, 4, 8, 6, 2] hat fünf Elemente. Welcher ist ihr größter gültiger nichtnegativer Index? Antworte nur mit einer ganzen Zahl.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Zähle die Positionen beginnend bei 0, nicht bei 1.
  2. Der letzte Index ist len(a) − 1, also 5 − 1.
Lösung anzeigen
Bei Länge 5 reichen die nichtnegativen Indizes von 0 bis 4. Der Wert am letzten Index ist 2, der gesuchte Index selbst aber 4.
BPE 7J22 Punktemittel

Ersetzungen nacheinander ausführen

Noch nicht begonnen

Aufgabenstellung

Gegeben: a = [9, 4, 2]. Führe zuerst a[1] = a[0] - a[2], dann a[0] = a[1] + 1 aus. Welche Liste entsteht? Antworte mit drei kommagetrennten Zahlen; Leerzeichen und eckige Klammern sind optional.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Berechne die rechte Seite, bevor du den jeweiligen Zielplatz ersetzt.
  2. Der zweite Befehl arbeitet mit dem schon geänderten Wert an Index 1.
Lösung anzeigen
Zuerst wird Index 1 zu 9−2 = 7. Der zweite Befehl liest bereits diese 7 und setzt Index 0 auf 8: [8, 7, 2].
BPE 7J22 Punktemittel

Zwei Namen, dieselbe Liste

Noch nicht begonnen

Aufgabenstellung

a = [3, 6], danach b = a und b[0] = 7. Welche Werte enthält a anschließend? Antworte kommagetrennt, optional mit eckigen Klammern.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Eine Zuweisung eines Listennamens erstellt nicht automatisch eine neue Liste.
  2. Für eine unabhängige äußere Liste wäre beispielsweise b = a.copy() nötig.
Lösung anzeigen
b = a kopiert nur die Referenz. Beide Namen bezeichnen dieselbe Liste; die Änderung über b ist deshalb auch über a sichtbar: [7, 6].
BPE 7J22 Punktemittel

Mit Hilfsvariable sicher tauschen

Noch nicht begonnen

Aufgabenstellung

Start: a = [4, 9, 2]. Danach: hilfe = a[0], a[0] = a[2], a[2] = hilfe. Gib die fertige Liste kommagetrennt an; eckige Klammern sind optional.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Der gespeicherte Hilfswert ändert sich nicht, wenn a[0] überschrieben wird.
  2. Die mittlere Position wird in keinem Befehl verändert.
Lösung anzeigen
hilfe bewahrt die alte 4. Nach der ersten Ersetzung steht vorübergehend [2, 9, 2], danach [2, 9, 4].
BPE 7J22 Punktemittel

Ein vollständiger Indexdurchlauf

Noch nicht begonnen

Aufgabenstellung

a ist eine beliebige, auch leere Liste. Welche Python-Schleifen liefern genau jeden gültigen nichtnegativen Index einmal? Wähle alle richtigen Antworten.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Die obere Grenze von range gehört nicht mehr zum Ergebnis.
  2. Für eine Liste mit einem Element muss genau Index 0 entstehen.
Lösung anzeigen
range(len(a)) und range(0, len(a)) liefern 0 bis len(a)−1; bei leerer Liste liefern beide nichts. +1 erzeugt einen ungültigen Index, Start 1 lässt Index 0 aus.
BPE 7J23 Punkteanspruchsvoll

Den ersten Platz in einer Kopie ersetzen

Noch nicht begonnen

Aufgabenstellung

Schreibe ersetze_ersten(a, neu): Gib eine neue Liste zurück, deren erstes Element durch neu ersetzt ist. Ist a leer, gib eine neue leere Liste zurück. Die Eingabe darf sich nicht ändern.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Arbeite auf a.copy(), damit die Eingabe unverändert bleibt.
  2. Ein erster Platz existiert genau dann, wenn len(ergebnis) > 0 gilt.
Lösung anzeigen
def ersetze_ersten(a, neu):
    ergebnis = a.copy()
    if len(ergebnis) > 0:
        ergebnis[0] = neu
    return ergebnis
BPE 7J23 Punkteanspruchsvoll

Zwei gültige Positionen vertauschen

Noch nicht begonnen

Aufgabenstellung

vertausche(a, i, j) soll eine neue Liste liefern, in der die Positionen i und j getauscht sind. Es gilt 0 ≤ i,j < len(a); beide Indizes dürfen gleich sein. Verändere a nicht.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Erstelle zuerst eine Kopie und lies beide alten Werte vor dem Überschreiben.
  2. Eine parallele Zuweisung oder eine Hilfsvariable schützt den zuerst gelesenen Wert.
Lösung anzeigen
def vertausche(a, i, j):
    ergebnis = a.copy()
    ergebnis[i], ergebnis[j] = ergebnis[j], ergebnis[i]
    return ergebnis
BPE 7J23 Punkteanspruchsvoll

Jeden Wert verdoppeln

Noch nicht begonnen

Aufgabenstellung

verdoppeln(a) erhält eine Liste ganzer Zahlen und gibt eine neue Liste mit jedem Wert mal 2 zurück. Reihenfolge und Länge bleiben erhalten; die Eingabe bleibt unverändert. Auch [] ist erlaubt.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Eine neue Ergebnisliste beginnt leer und wächst um einen Wert je Eingabeelement.
  2. append(2 * wert) hängt genau einen verdoppelten Wert hinten an.
Lösung anzeigen
def verdoppeln(a):
    ergebnis = []
    for wert in a:
        ergebnis.append(2 * wert)
    return ergebnis
BPE 7J23 Punkteanspruchsvoll

Eine Liste ihrer Positionen bilden

Noch nicht begonnen

Aufgabenstellung

indizes(a) gibt eine neue Liste aller gültigen nichtnegativen Indizes von a zurück. Beispiel: indizes([40, 40, 2]) liefert [0, 1, 2], nicht die Werte. Die Eingabe bleibt unverändert.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Die gespeicherten Werte bestimmen nicht, welche Positionen existieren.
  2. range(len(a)) erzeugt genau die benötigten Positionen.
Lösung anzeigen
def indizes(a):
    ergebnis = []
    for i in range(len(a)):
        ergebnis.append(i)
    return ergebnis
BPE 7J23 Punkteanspruchsvoll

Eine Indexgrenze prüfen

Noch nicht begonnen

Aufgabenstellung

gueltiger_index(a, i) erhält eine Liste und eine ganze Zahl. Liefere den Wahrheitswert True genau für 0 ≤ i < len(a), sonst False. Negative Python-Indizes sind hier ausdrücklich nicht erlaubt; keine Listenelemente verändern.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Ein erlaubter Index darf weder negativ sein noch die Länge erreichen.
  2. Verbinde i >= 0 und i < len(a); die leere Liste hat keinen passenden Index.
Lösung anzeigen
def gueltiger_index(a, i):
    return 0 <= i < len(a)
BPE 7J23 Punkteanspruchsvoll

Kopieren passend zum Datentyp

Noch nicht begonnen

Aufgabenstellung

Eine Liste enthält ausschließlich ganze Zahlen. Eine Funktion soll einen Platz ersetzen, ohne die Eingabe zu verändern. Welche Vorbereitung erfüllt das?

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Hier geht es um das Ersetzen eines Listenplatzes, nicht um das Ändern verschachtelter Objekte.
  2. Nur die Kopieroperation erzeugt ein zweites Listenobjekt.
Lösung anzeigen
a.copy() erzeugt eine unabhängige äußere Liste. Für das Ersetzen ihrer Zahlenwerte reicht das; eine einfache Zuweisung erzeugt dagegen einen zweiten Namen für dieselbe Liste.

Lektionsabschluss

Bearbeite Aufgaben, um deine Auswertung zu sehen.