HOWTO · Python
Rückwärts über einen Bereich in Python iterieren
Dieses Tutorial zeigt, wie Sie mit der Funktion `range()` in Python rückwärts iterieren.
Auf dieser Seite
Wie Sie in Python rückwärts iterieren, hängt davon ab, was Sie durchlaufen möchten. Verwenden Sie ein absteigendes range() für Zahlen, reversed(), um eine vorhandene Sequenz unverändert rückwärts zu durchlaufen, oder Slicing, wenn Sie eine umgekehrte Kopie benötigen.
range() mit einer negativen Schrittweite verwenden
range(start, stop, step) erzeugt Werte von start in Richtung stop, schließt stop jedoch nicht ein. Eine negative Schrittweite zählt abwärts. Wenn Sie beispielsweise von 10 bis einschließlich 1 zählen möchten, beginnen Sie bei 10 und verwenden 0 als exklusiven Endwert:
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
for number in range(10, 0, -1):
print(number)
Um beim Rückwärtszählen von 100 die Null einzuschließen, verwenden Sie range(100, -1, -1): Der Endwert muss um eins kleiner sein als der letzte gewünschte Wert. Wenn der Startwert bei einer negativen Schrittweite bereits unter dem Endwert liegt, wird nicht abwärts gezählt. Wählen Sie Startwert, Endwert und Schrittweite so, dass sie in dieselbe Richtung weisen. range() ist nützlich, wenn die Schleife Zahlen benötigt, etwa Indizes oder einen Countdown, statt Elemente einer Sammlung.
Mit reversed() eine Sequenz durchlaufen
Verwenden Sie reversed(), wenn Sie die Elemente einer vorhandenen Sequenz vom letzten bis zum ersten durchlaufen möchten. Die Funktion gibt einen Iterator zurück und lässt die ursprüngliche Sequenz unverändert. Sie funktioniert unter anderem mit Listen, Zeichenketten und Bereichen sowie mit anderen umkehrbaren Objekten.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
items = ["first", "second", "third"]
for item in reversed(items):
print(item)
Bei einer numerischen Sequenz durchläuft reversed(range(5)) die Werte von 4 abwärts bis 0. Diese Form eignet sich, wenn die Werte bereits aus einem Bereich stammen. Verwenden Sie ein range() mit negativer Schrittweite, wenn Sie das absteigende Zahlenintervall direkt angeben möchten. Da reversed() einen Iterator zurückgibt, wird keine zweite Liste erstellt, nur um die Elemente rückwärts zu durchlaufen.
Eine Liste oder Zeichenkette mit Slicing umkehren
Ein Slice mit der Schrittweite -1, geschrieben als sequence[::-1], gibt die Elemente in umgekehrter Reihenfolge zurück. Bei einer Liste oder Zeichenkette entsteht dadurch eine neue Sequenz; das Original bleibt unverändert. Das ist praktisch, wenn Sie den umgekehrten Wert selbst benötigen, etwa um ihn einer anderen Variablen zuzuweisen oder an eine Funktion zu übergeben.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
word = "Python"
backward = word[::-1]
print(backward)
Beim Slicing wird eine Kopie angelegt, deren Speicherbedarf proportional zur Länge der Sequenz ist. Wenn Sie die Elemente nur durchlaufen und keinen separaten umgekehrten Wert benötigen, vermeidet reversed(sequence) diese Kopie. Dieselbe Slice-Schreibweise funktioniert auch mit Listen, zum Beispiel items[::-1].
Einen Zähler verwenden, wenn Sie eine eigene Schleifenlogik benötigen
Eine while-Schleife ist nützlich, wenn jeder Schritt von der Arbeit im vorherigen Durchlauf abhängt oder die Aktualisierung aufwendiger ist als das Subtrahieren von eins. Setzen Sie den Zähler auf den ersten zu verarbeitenden Wert, schließen Sie diesen Wert in die Bedingung ein, wenn er null ist, und aktualisieren Sie den Zähler genau einmal pro Durchlauf:
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
number = 4
while number >= 0:
print(number)
number -= 1
4
3
2
1
0
Die Bedingung number >= 0 schließt null ein. Mit number > 0 würde die Schleife enden, bevor null verarbeitet wird. Für einen einfachen, festen Countdown ist range() kürzer und weniger anfällig für Fehler bei der Aktualisierung. Verwenden Sie einen Zähler, wenn eine eigene Schleifenlogik die explizite Aktualisierung sinnvoll macht.
Die passende Methode zum Rückwärtsiterieren auswählen
Verwenden Sie ein range() mit negativer Schrittweite, wenn Sie eine Folge absteigender Zahlen oder Indizes benötigen. Mit reversed() durchlaufen Sie eine vorhandene Sequenz unverändert rückwärts, ohne eine Kopie anzulegen. Verwenden Sie [::-1], wenn Sie eine Liste oder Zeichenkette als neuen, umgekehrten Wert benötigen; beachten Sie dabei, dass dieser Wert durch Kopieren entsteht. Wählen Sie einen Zähler in einer while-Schleife, wenn der nächste Schritt oder die Abbruchbedingung von einer eigenen Logik abhängt. Entscheiden Sie in jedem Fall vorab, ob der Endwert enthalten sein soll, bevor Sie den Endwert von range oder die Schleifenbedingung festlegen. Das ist die häufigste Ursache für Fehler um eins.