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

Python Syntax
next(iterator)
next(iterator, default)
Parameter
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:

Python Beispiel
it = iter([1, 2, 3])
print(next(it))
print(next(it))
print(next(it))
try:
    print(next(it))
except StopIteration:
    print("fertig")
Output
1
2
3
fertig

Mit Default-Wert

Der default-Parameter spart das try/except und ist ideal, wenn der erschöpfte Iterator ein erwarteter Fall ist:

Python Beispiel
it = iter([1])
print(next(it, "leer"))
print(next(it, "leer"))   # Iterator erschöpft → default
Output
1
leer

Generator manuell starten

Generatoren werden bei Erstellung „pausiert" — der erste next()-Aufruf führt den Code bis zum ersten yield:

Python Beispiel
def count():
    i = 0
    while True:
        yield i
        i += 1

z = count()
print(next(z))
print(next(z))
print(next(z))
Output
0
1
2

Praktische 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:

Python Beispiel
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)
Output
{'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:

Python Beispiel
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:

Python Beispiel
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)
Output
10 20 → Differenz: 10
20 30 → Differenz: 10
30 40 → Differenz: 10

Praktische Hinweise

  • next(iter(iterable)) liefert das erste Element jedes Iterables — universell einsetzbar.
  • default ist Pythons Pendant zu „findFirst" in anderen Sprachen.
  • StopIteration in Generatoren: seit PEP 479 wird sie nicht mehr stillschweigend hochgereicht — entweder explizit fangen oder default nutzen.
  • Verwandte Funktion: iter() (Iterator erzeugen), itertools.islice() (mehrere auf einmal), itertools.pairwise() (Python 3.10+).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht