Menu
Français

Boucles for en Python : itérer listes, chaînes, ranges et dictionnaires

Comment fonctionne la boucle for de Python — itérer sur des listes, chaînes, ranges, dictionnaires et tout autre objet itérable, plus break, continue et else.

La boucle for de Python, c'est « pour chaque »

Si tu as utilisé un langage de style C, la boucle for de Python va sembler différente. Il n'y a pas de motif à compteur for (i = 0; i < n; i++). Le for de Python est strictement une boucle pour chaque : tu lui donnes une collection et elle te remet les éléments un par un.

main.py
Output
Click Run to see the output here.

Ça affiche trois lignes. Python lit la liste, en extrait chaque élément tour à tour, et le lie à color pendant que le corps s'exécute. Quand il ne reste plus rien, la boucle se termine.

Remarque la forme — for <nom> in <itérable>: suivi d'un corps indenté. Indentation, deux-points, corps ; même structure que if.

Qu'est-ce qui compte comme itérable

Pratiquement tout ce qui contient une séquence de valeurs. Listes, tuples, chaînes, ranges, dictionnaires, ensembles, fichiers et la plupart des objets personnalisés que tu construiras.

main.py
Output
Click Run to see the output here.

L'uniformité, c'est la partie agréable — une syntaxe, plusieurs formes de données.

Compter avec range()

Quand tu veux vraiment un compteur — « fais ceci dix fois » ou « boucle à travers les indices 0 à 9 » — utilise range() :

main.py
Output
Click Run to see the output here.

Ça affiche 0, 1, 2, 3, 4. range(stop) compte depuis 0 jusqu'à mais sans inclure stop. range(start, stop) te laisse définir une valeur de départ, et range(start, stop, step) te laisse contrôler la taille du pas :

main.py
Output
Click Run to see the output here.

Il y a une page dédiée à range qui arrive parce qu'il mérite d'être compris un peu plus en profondeur. Pour l'instant, range(n) te donne n itérations numérotées de 0 à n-1.

enumerate en Python : boucler avec un index

Un besoin courant : « je veux l'index et la valeur ensemble ». L'instinct du débutant est d'utiliser range(len(...)), mais Python a un outil plus agréable :

main.py
Output
Click Run to see the output here.

enumerate() renvoie des paires (index, valeur). La double variable après for déballe la paire en deux noms — index et color. Bien plus propre que :

main.py
Output
Click Run to see the output here.

Si tu veux commencer à compter à 1 au lieu de 0, passe start=1 :

main.py
Output
Click Run to see the output here.

zip en Python : itérer sur deux séquences en parallèle

Quand tu as deux listes de longueur égale et que tu veux les apparier :

main.py
Output
Click Run to see the output here.

zip s'arrête à la séquence la plus courte. Si tu veux qu'il continue et remplisse avec None, utilise itertools.zip_longest.

Itérer un dict

Les dictionnaires te donnent le choix sur ce sur quoi boucler :

main.py
Output
Click Run to see the output here.

La plupart du temps, tu veux .items() — tu obtiens la clé et la valeur ensemble sur une ligne lisible.

break et continue

Parfois tu veux sortir plus tôt ou sauter une itération.

break quitte la boucle immédiatement :

main.py
Output
Click Run to see the output here.

Une fois qu'un nombre au-dessus de 6 est trouvé, la boucle s'arrête. Les éléments restants sont ignorés.

continue saute le reste de l'itération courante et passe à la suivante :

main.py
Output
Click Run to see the output here.

Les deux sont bien à utiliser, même si continue peut rendre les boucles plus difficiles à suivre si tu en as plus d'un. Souvent un simple if/else se lit mieux.

La clause else sur une boucle

Python a une fonctionnalité que la plupart des langages n'ont pas : une clause else sur les boucles. Elle s'exécute quand la boucle se termine sans avoir rencontré un break.

main.py
Output
Click Run to see the output here.

Utile, mais déroutant au début. Ne te sens pas obligé de l'utiliser — un drapeau booléen en dehors de la boucle est souvent plus clair pour les nouveaux lecteurs.

Muter une liste pendant qu'on itère

Un piège à signaler : n'ajoute pas et ne retire pas d'éléments à une liste pendant que tu boucles dessus. L'itération se mélange sur quels indices sont encore valides, et tu rates des éléments ou tu déclenches une erreur. Le motif sûr, c'est de construire une nouvelle liste :

main.py
Output
Click Run to see the output here.

Ou, une fois à l'aise, une compréhension de liste fait la même chose en une ligne — on couvrira ça dans le chapitre Collections.

Un petit exemple de bout en bout

Attache quelques-uns de ces éléments — lire une liste, filtrer, énumérer, afficher :

main.py
Output
Click Run to see the output here.

Ensuite : les boucles while

for est le bon choix quand tu sais ce sur quoi tu itères. while est le bon choix quand tu boucles jusqu'à ce qu'une condition change — c'est pour la suite.

Questions fréquentes

Comment fonctionne une boucle for en Python ?

for item in sequence: exécute le corps indenté une fois pour chaque élément de la séquence, avec item prenant chaque valeur tour à tour. Les séquences incluent les listes, tuples, chaînes, dictionnaires, ranges et tout objet qui définit un itérateur.

Quelle est la différence entre break et continue ?

break quitte la boucle immédiatement, en sautant toutes les itérations restantes. continue saute le reste de l'itération courante et passe à la suivante. break est pour « j'ai fini » ; continue est pour « saute celle-ci ».

Comment boucler avec un index en Python ?

Enveloppe la séquence dans enumerate(...) pour obtenir des paires (index, valeur) : for i, item in enumerate(items):. Bien plus propre que de maintenir ton propre compteur avec i += 1 en fin de boucle.

Apprendre à coder avec Coddy

COMMENCER