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.
Exemple
#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)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
#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 aveciter().default
optionnel
La valeur renvoyée quand l’itérateur est épuisé. Sans elle,StopIterationest levée.
Plus d’exemples
#levels = iter([1, 2])
print(next(levels))
print(next(levels))
print(next(levels, "fin"))
try:
next(levels)
except StopIteration:
print("StopIteration")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(";"))))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))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 uneTypeError, car une liste n’est pas un itérateur. Utilisez d’aborditer().
Entrées associées
#Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.