Python range für schnelles zählen und indizieren
Das eingebaute python range erzeugt eine unveränderliche Ganzzahlsequenz, definiert durch Start, Stopp und Schritt.
Nutze es, wenn du zuverlässige Zähler oder Index-Offsets brauchst, ohne eine Liste aller Zahlen zu erstellen.
Es zeigt, wie Start, Stopp und Schritt die Zahlen steuern, die ein range erzeugt.
Für Schleifenmuster mit range siehe das Python for-Schleifenbeispiel.
Python Range-Beispiel Für Zählen Mit Schritt
Ausgabe:
Die Ausgabe erscheint hier...
Ausgabe:
Stift: 10 mm
Tacker: 30 mm
So Funktioniert Dieses Beispiel
range(0, len(items), 2)läuft Listenindizes mit Schritt 2 ab.- Der Stoppwert ist exklusiv, daher erreicht er nie
len(items). - Jeder Index liest ein Element und gibt einen Wert aus, der an den Index gebunden ist (10, 30).
Häufige stolperfallen mit Python range
Fehler 1: Erwarten, dass der Stoppwert enthalten ist.
for n in range(1, 5):
print(n)
for n in range(1, 6):
print(n)
Warum das passiert: range stoppt vor dem Stoppwert, daher benötigen inklusive Sequenzen stop + 1.
Fehler 2: Positiven Schritt beim Runterzählen verwenden.
for n in range(5, 0, 1):
print(n)
for n in range(5, 0, -1):
print(n)
Warum das passiert: Ein positiver Schritt bewegt nur nach oben; zum Runterzählen muss der Schritt negativ sein, sonst ist der range leer.
Fehler 3: Nicht-Integer als Start, Stopp oder Schritt übergeben.
for rate in range(0, 1, 0.1):
print(rate)
for basis_points in range(0, 101, 5):
rate = basis_points / 100
print(rate)
Warum das passiert: range-Argumente müssen Integer sein (oder __index__ implementieren), und der Schritt darf nicht null sein.
python range vs list(range): was nutzen?
Nutze range, wenn… | Nutze list(range(...)), wenn… |
|---|---|
| Du nur iterieren oder nach Integern indexieren musst. | Du die Zahlen später speichern oder mutieren musst. |
| Du beim Iterieren konstanten Speicher willst. | Du O(n)-Speicher für eine konkrete Liste akzeptierst. |
| Du ein Sequenzobjekt mit berechenbarem Start/Stopp/Schritt brauchst. | Du Listenmethoden wie append oder sort brauchst. |
Faustregel: Greife zu range für Iteration und Offsets; materialisiere eine Liste nur, wenn du wirklich alle Werte im Speicher brauchst.
Wenn du Index + Wert brauchst, nimm enumerate — siehe das Python enumerate-Beispiel.
Performance-Überlegungen
range speichert nur Start, Stopp und Schritt, daher nutzt es O(1) Speicher selbst für sehr große Sequenzen.
Mitgliedschaftstests wie n in range(...) sind für Integer konstant, was schneller ist als eine Liste zu durchsuchen.
Wenn du list(range(...)) aufrufst, bezahlst du O(n) Speicher und Zeit, um jeden Wert zu erstellen, daher nur nutzen, wenn du wirklich eine Liste brauchst.
Weitere muster für Python range
Retries mit negativem Schritt herunterzählen.
for remaining in range(3, 0, -1):
print(f"Neuer Versuch in {remaining}s")
Der negative Schritt lässt die Sequenz abwärts laufen, und der Stoppwert bleibt exklusiv. Das hält einen Countdown kurz und vorhersehbar, ohne zusätzliche Bedingungen.
Geschäftszeiten ohne Liste erzeugen.
for hour in range(9, 18):
print(f"{hour}:00")
range(9, 18) liefert 9 bis 17, was einem 9-bis-5-Zeitraum mit exklusivem Stopp entspricht.
Das ist eine saubere Art, feste Slots zu erzeugen, ohne die Zahlen vorab zu bauen.
Wann du Python range verwenden solltest
- Verwende es für Zähler, Offsets oder feste Schritt-Schleifen, bei denen die Daten eine Integerfolge sind.
- Verwende es, wenn du eine speichereffiziente Sequenz statt einer vorab gebauten Liste willst.
- Vermeide es für nicht-integer Schritte; skaliere auf Integer oder nutze andere numerische Tools.
- Vermeide
list(range(...)), es sei denn, du musst die Werte später speichern oder mutieren.