Die Python-Funktion next(iterator) liefert das nächste Element aus einem Iterator und treibt damit die Iteration einen Schritt voran. Ist der Iterator erschöpft, wird StopIteration ausgelöst — es sei denn, ein optionaler default-Wert wird übergeben, der dann anstelle der Exception zurückgegeben wird. next() bildet zusammen mit iter() das Fundament aller Iterations-Mechanismen in Python.
Einleitung
Während for x in iterable automatisch iter() und next() im Hintergrund aufruft, gibt es Situationen, in denen man die Iteration manuell steuern möchte:
- Das erste Element eines Generators auslesen, ohne den Rest zu verbrauchen
- In einem Generator vorausschauen (peek-and-decide)
- Einen Iterator partiell durchlaufen (z. B. Header in einer Datei separat lesen)
- Ein passendes Element in einem Iterable suchen (
next(... for ... if ...))
next() ist dafür das richtige Werkzeug. Mit default wird es auch zu einem eleganten Lookup-Helfer: „erstes passendes Element oder Fallback".
Syntax
next(iterator)
next(iterator, default)iterator Ein Iterator-Objekt (mit __next__()-Methode). Kein gewöhnliches Iterable — vorher mit iter() umwandeln.
default (Optional) Wert, der zurückgegeben wird, wenn der Iterator erschöpft ist. Ohne default wird StopIteration geworfen.
Rückgabewert
Das nächste Element des Iterators. Bei erschöpftem Iterator: default (falls angegeben) oder StopIteration-Exception.
Beispiele
Manuelle Iteration eines Iterators
Beachte, dass iter() aus einem Iterable einen Iterator macht — Listen direkt mit next() anzusprechen funktioniert nicht:
it = iter([1, 2, 3])
print(next(it))
print(next(it))
print(next(it))
try:
print(next(it))
except StopIteration:
print("fertig")1
2
3
fertigMit Default-Wert
Der default-Parameter spart das try/except und ist ideal, wenn der erschöpfte Iterator ein erwarteter Fall ist:
it = iter([1])
print(next(it, "leer"))
print(next(it, "leer")) # Iterator erschöpft → default1
leerGenerator manuell starten
Generatoren werden bei Erstellung „pausiert" — der erste next()-Aufruf führt den Code bis zum ersten yield:
def count():
i = 0
while True:
yield i
i += 1
z = count()
print(next(z))
print(next(z))
print(next(z))0
1
2Praktische Beispiele
Erstes passendes Element finden
Mit einem Generator-Ausdruck und default=None ergibt sich Pythons idiomatische „find first matching"-Funktion — kompakter als eine ganze Schleife:
users = [
{"name": "Alice", "alter": 17},
{"name": "Bob", "alter": 24},
{"name": "Cleo", "alter": 31},
]
first_adult = next(
(u for u in users if u["alter"] >= 18),
None,
)
print(first_adult){'name': 'Bob', 'alter': 24}Header einer Datei separat behandeln
Indem wir den Iterator vor der for-Schleife einmal mit next() „anstoßen", überspringen wir die erste Zeile sauber:
with open("data.csv") as f:
header = next(f).rstrip().split(",")
print(f"Spalten: {header}")
for line in f:
# Header-Loop ist bereits vorbei
process(line)Zwei aufeinanderfolgende Elemente eines Iterables vergleichen
Mit zwei Iteratoren auf der gleichen Sequenz und einem Versatz lässt sich ein simples „Pairwise"-Pattern bauen — exakt das, was itertools.pairwise macht:
from itertools import tee
def pairwise(iterable):
a, b = tee(iterable)
next(b, None) # zweiten Iterator um 1 vorrücken
return zip(a, b)
for a, b in pairwise([10, 20, 30, 40]):
print(a, b, "→ Differenz:", b - a)10 20 → Differenz: 10
20 30 → Differenz: 10
30 40 → Differenz: 10Praktische Hinweise
next(iter(iterable))liefert das erste Element jedes Iterables — universell einsetzbar.defaultist Pythons Pendant zu „findFirst" in anderen Sprachen.StopIterationin Generatoren: seit PEP 479 wird sie nicht mehr stillschweigend hochgereicht — entweder explizit fangen oderdefaultnutzen.- Verwandte Funktion:
iter()(Iterator erzeugen),itertools.islice()(mehrere auf einmal),itertools.pairwise()(Python 3.10+).