Les boucles for en Python
Apprenez comment fonctionnent les boucles for en Python : syntaxe, range(), enumerate(), break, continue, else, boucles imbriquées et itération sur des listes, string et dictionnaires.
Une boucle for en Python itère sur chaque élément d'une séquence — une liste, un tuple, un string, un dictionnaire, un ensemble ou tout autre itérable — et exécute un bloc de code une fois par élément. Contrairement aux langages où for compte généralement des nombres, le for de Python est une boucle for-each qui parcourt directement les éléments.
Ce chapitre couvre :
- La syntaxe de base et le fonctionnement de la variable de boucle
- La fonction
range()pour les boucles comptées break,continueet la clauseelseenumerate()etzip()pour une itération plus riche- L'itération sur des string, des dictionnaires et des structures imbriquées
- Les boucles
forimbriquées - L'instruction
passcomme espace réservé
Syntaxe de base
for variable in iterable:
# block executed once per itemvariable reçoit chaque élément successif de iterable. Le bloc indenté s'exécute une fois pour chaque élément.
Itérer sur une liste
Résultat :
apple
banana
cherryLa boucle assigne "apple" à fruit, exécute print(fruit), puis passe à "banana", et ainsi de suite jusqu'à ce que tous les éléments soient épuisés.
Itérer sur un string
Un string est lui-même un itérable — chaque caractère est un élément :
for ch in "Python":
print(ch)Résultat :
P
y
t
h
o
nLa fonction range()
range() génère une séquence d'entiers à la demande. C'est la façon la plus courante d'exécuter une boucle un nombre précis de fois.
range(stop)
range(start, stop)
range(start, stop, step)| Paramètre | Par défaut | Signification |
|---|---|---|
start | 0 | Première valeur (incluse) |
stop | requis | Borne supérieure (exclue) |
step | 1 | Incrément entre les valeurs |
Compter de 1 à 5
Résultat :
1
2
3
4
5range(1, 6) produit 1, 2, 3, 4, 5 — la valeur d'arrêt 6 n'est pas incluse.
Compter par pas
for i in range(0, 10, 2):
print(i)Résultat :
0
2
4
6
8Compter à rebours
Un pas négatif itère en sens inverse :
for i in range(10, 0, -2):
print(i)Résultat :
10
8
6
4
2L'instruction break
break quitte immédiatement la boucle, avant que tous les éléments aient été parcourus.
for i in range(1, 6):
if i == 3:
break
print(i)Résultat :
1
2Dès que i vaut 3, break se déclenche et la boucle s'arrête — 3, 4 et 5 ne sont jamais affichés.
Quand utiliser break : pour rechercher un élément dans une liste et s'arrêter dès qu'une correspondance est trouvée ; pour sortir tôt d'un long calcul.
L'instruction continue
continue ignore le reste de l'itération en cours et passe directement à l'élément suivant.
for i in range(1, 6):
if i == 3:
continue
print(i)Résultat :
1
2
4
5Lorsque i vaut 3, continue ignore print(i) et saute à i = 4.
La clause else
La boucle for de Python prend en charge un bloc else optionnel qui s'exécute uniquement si la boucle s'est terminée normalement (c'est-à-dire qu'elle n'a pas été interrompue par break).
for i in range(1, 4):
print(i)
else:
print("Loop finished")Résultat :
1
2
3
Loop finishedSi la boucle se termine via break, le bloc else est ignoré :
for i in range(1, 6):
if i == 3:
break
print(i)
else:
print("Loop finished without break")Résultat :
1
2La clause else est utile pour indiquer si une recherche a réussi — si vous faites un break sur une correspondance, le bloc else ne s'exécute que lorsqu'aucune correspondance n'a été trouvée.
enumerate() — boucle avec index et valeur
enumerate() associe chaque élément à son index de position, vous obtenez les deux en une seule boucle sans variable compteur séparée.
colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
print(index, color)Résultat :
0 red
1 green
2 bluePour commencer à compter à partir d'un autre nombre, passez start :
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
print(i, fruit)Résultat :
1 apple
2 banana
3 cherryzip() — itérer sur deux séquences à la fois
zip() associe côte à côte les éléments de deux itérables (ou plus) :
names = ["Alice", "Bob", "Charlie"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
print(name, score)Résultat :
Alice 95
Bob 87
Charlie 92zip() s'arrête lorsque l'itérable le plus court est épuisé.
Itérer sur des dictionnaires
Itérer sur un dictionnaire produit par défaut ses clés :
person = {"name": "Alice", "age": 30, "city": "Paris"}
for key in person:
print(key, ":", person[key])Résultat :
name : Alice
age : 30
city : ParisUtilisez .items() pour obtenir les paires clé-valeur ensemble :
for key, value in person.items():
print(key, ":", value)Résultat :
name : Alice
age : 30
city : ParisConsultez également le chapitre Boucler sur les dictionnaires pour plus de modèles.
Boucles for imbriquées
Une boucle for peut être placée à l'intérieur d'une autre boucle for. La boucle intérieure s'exécute entièrement pour chaque itération de la boucle extérieure.
Résultat :
red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherryAttention : un break à l'intérieur d'une boucle imbriquée ne sort que de la boucle intérieure, pas des deux. Pour sortir des deux boucles à la fois, vous avez besoin d'une variable indicatrice ou de refactoriser en fonction avec return.
L'instruction pass
pass est un espace réservé sans opération. Utilisez-le lorsqu'une boucle for est syntaxiquement requise mais que vous n'avez rien à mettre dans le corps pour l'instant :
for i in range(3):
pass # TODO: implement laterSans pass, Python lèverait une IndentationError car un bloc vide est une syntaxe invalide.
Les boucles for vs les compréhensions de liste
Un modèle courant consiste à construire une nouvelle liste à l'intérieur d'une boucle for :
squares = []
for x in range(1, 6):
squares.append(x ** 2)
print(squares)Résultat : [1, 4, 9, 16, 25]
Python propose une alternative plus concise appelée compréhension de liste :
squares = [x ** 2 for x in range(1, 6)]
print(squares)Résultat : [1, 4, 9, 16, 25]
Les compréhensions de liste sont idiomatiques pour les transformations simples ; utilisez une boucle for classique lorsque le corps est complexe ou comporte des effets de bord.
Choisir entre for et while
| Situation | Préférer |
|---|---|
| Vous connaissez le nombre d'itérations ou avez un itérable | for |
| Vous bouclez jusqu'à ce qu'une condition change | while |
| Vous avez besoin de l'index et de la valeur | for + enumerate() |
| Vous itérez sur deux listes simultanément | for + zip() |