next()

Récupère l’élément suivant d’un itérateur. Une fois celui-ci épuisé, renvoie une valeur par défaut ou lève StopIteration.

Renvoie
L’élément suivant de l’itérateur, ou default.
Sur cette page

Exemple

#
Python
students = [
    {"name": "Lucas", "points": 80},
    {"name": "Léa", "points": 250},
    {"name": "Emma", "points": 310},
]

leader = next((s["name"] for s in students if s["points"] > 200), None)
print(leader)

nobody = next((s["name"] for s in students if s["points"] > 1000), None)
print(nobody)
Résultatrésultat enregistré, vous pouvez le vérifier
Léa
None

Définition et utilisation

#

La fonction next(iterator) renvoie l’élément suivant de l’itérateur et le fait avancer. Elle fonctionne sur les itérateurs et les générateurs, mais pas directement sur une liste ou une chaîne : il faut d’abord en obtenir un itérateur avec iter().

Quand les éléments s’épuisent, next() lève StopIteration. Si vous donnez un second argument, il est renvoyé à la place de l’exception, donc next(iterator, None) est une façon sûre de récupérer un élément qui pourrait ne pas exister.

Il est très utile de combiner next() avec une expression génératrice ou avec filter() : next((s for s in students if s["points"] > 200), None) renvoie le premier élément qui remplit la condition et arrête la recherche dès qu’il est trouvé. Avant une boucle for, il est aussi pratique de sauter la première ligne de données, comme un en-tête, avec next().

Syntaxe

#
Syntaxe
next(iterator)
next(iterator, default)

Paramètres

#
  • iterator

    itérateur ou générateur

    L’objet dont vous récupérez un élément. Convertissez d’abord une liste avec iter().
  • default

    optionnel

    La valeur renvoyée quand l’itérateur est épuisé. Sans elle, StopIteration est levée.

Plus d’exemples

#
Récupération manuelle et StopIteration
Python
levels = iter([1, 2])

print(next(levels))
print(next(levels))
print(next(levels, "fin"))

try:
    next(levels)
except StopIteration:
    print("StopIteration")
Résultatrésultat enregistré, vous pouvez le vérifier
1
2
fin
StopIteration
Sauter la ligne d’en-tête
Python
lines = ["nom;points", "Léa;250", "Lucas;80"]
rows = iter(lines)

header = next(rows).split(";")
for line in rows:
    print(dict(zip(header, line.split(";"))))
Résultatrésultat enregistré, vous pouvez le vérifier
{'nom': 'Léa', 'points': '250'}
{'nom': 'Lucas', 'points': '80'}
Valeurs successives d’un générateur
Python
def ticket_numbers(prefix):
    number = 1
    while True:
        yield f"{prefix}-{number:03}"
        number += 1

tickets = ticket_numbers("PY")
print(next(tickets))
print(next(tickets))
print(next(tickets))
Résultatrésultat enregistré, vous pouvez le vérifier
PY-001
PY-002
PY-003

Bonnes pratiques

#
  • Pour chercher le premier élément correspondant, utilisez next(generator, None) plutôt que de construire toute la liste et de prendre [0]. La recherche s’arrête à la première correspondance, et l’absence de résultat ne lève pas d’IndexError.
  • Quand vous ajoutez un second argument à côté d’une expression génératrice, entourez-la de parenthèses : next((x for x in items), None).
  • Appeler next() sur une liste lève une TypeError, car une liste n’est pas un itérateur. Utilisez d’abord iter().

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.