Erklärung zur Lektion
Nach dieser Lektion kannst du:
start:stop eine Teilliste extrahieren und dabei bedenken, dass stop exklusiv ist.[:] oder .copy() eine unabhängige Kopie der äußeren Liste erstellen.Ein Slice wählt mehrere Elemente aus, ohne jedes einzeln zu indizieren. Bei items[start:stop] ist start enthalten und stop nicht. Zum Beispiel liefert items[1:4] die Elemente an den Indizes 1, 2 und 3.
Ein Slice darf eine der beiden Grenzen auslassen: items[:3] nimmt die ersten drei Elemente, und items[2:] nimmt alles ab Index 2. Negative Grenzen zählen vom Ende aus, wie du es in der vorherigen Lektion geübt hast. items[::2] nimmt mit einer positiven Schrittweite (step) jedes zweite Element. Anders als bei der Indizierung stoppt ein Slice, dessen Ende über die Listenlänge hinausgeht, einfach bei den vorhandenen Elementen.
Kopieren ist wichtig, wenn Daten veränderlich sind. candidate = baseline erzeugt keine neue Liste; beide Namen verweisen auf dasselbe Objekt. Dagegen erzeugt candidate = baseline[:] oder candidate = baseline.copy() eine neue äußere Liste. Das Aktualisieren eines Elements der obersten Ebene in der Kopie ändert das Original nicht.
Das sind flache Kopien (shallow copies): Wenn die Liste veränderliche verschachtelte Objekte enthält, werden diese verschachtelten Objekte weiterhin gemeinsam genutzt. Tiefere Strukturen behandeln wir später.
Die Endposition ist nicht enthalten.
stages = ["fetch", "build", "test", "package", "deploy"]
print(stages[1:4])Ausgabe:
['build', 'test', 'package']Das Element am Index 4 bleibt außen vor.
Wenn du Start oder Ende weglässt, kannst du leicht Elemente von beiden Enden auswählen.
regions = ["eu", "us", "apac", "sa", "ca"]
print(regions[:2])
print(regions[-2:])Ausgabe:
['eu', 'us']
['sa', 'ca']Der negative Start wählt die letzten beiden Elemente aus.
Ein dritter Slice-Wert bestimmt, wie weit zwischen den ausgewählten Elementen gesprungen wird.
readings = [8, 9, 10, 11, 12, 13]
print(readings[::2])Ausgabe:
[8, 10, 12]Die Auswahl beginnt beim ersten Element und rückt jeweils um zwei vor.
Eine Slice-Kopie liefert eine neue Liste, die unabhängig aktualisiert werden kann.
baseline = ["queued", "running", "done"]
preview = baseline[:]
preview[1] = "paused"
print(baseline)
print(preview)Ausgabe:
['queued', 'running', 'done']
['queued', 'paused', 'done']baseline ändert sich nicht. Mit baseline.copy() kannst du diese Art von Kopie ebenfalls erstellen.
| Bedarf | Syntax |
|---|---|
Vom Anfang bis stop - 1 nehmen | items[:stop] |
Von start bis zum Ende nehmen | items[start:] |
| Einen mittleren Ausschnitt nehmen | items[start:stop] |
| Jedes zweite Element nehmen | items[::2] |
| Die äußere Liste kopieren | items[:] oder items.copy() |
| Einen weiteren Namen für dieselbe Liste erstellen | alias = items |
IndexError auslöst: Er liefert sicher den vorhandenen Teil.candidate = baseline als Kopie verwenden: Dann zeigen beide Namen auf dieselbe Liste.[:] und .copy() kopieren nur die äußere Liste.