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.
Ç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.
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() :
Ç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 :
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 :
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 :
Si tu veux commencer à compter à 1 au lieu de 0, passe start=1 :
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 :
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 :
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 :
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 :
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.
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 :
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 :
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.