Qu'est ce qu'une "boucle for" ?
En programmation, on parle d’itérables pour désigner des objets regroupant une collection d’objets qu’on peut parcourir. Parmi les itérables on compte entre autres : les listes, les tuples, les dictionnaires ou les strings…
Les boucles for permettent de parcourir des itérables et de répéter une suite d’instructions pour chaque élément. Le code à exécuter est alors répété autant de fois que le nombre d’éléments que contient notre itérable. En tant qu’essentiel de la programmation, les boucles for sont utilisées dans tous les métiers de la data : data analyst, data scientist ou encore data engineer.
Dans cet article, nous verrons comment utiliser l’instruction “for” sur différents types d’objets et en quoi les boucles for permettent de répondre au célèbre adage de programmation « Don’t Repeat Yourself ».
Pour nous familiariser avec l’utilisation des boucles nous allons d’abord apprendre à les utiliser sur des éléments de type liste.
Utiliser une boucle pour itérer sur une liste avec l’instruction "For"
Nous allons créer une boucle for pour récupérer le prénom de chaque élève dans une variable « students » de type liste, qui est composée du prénom et du nom des élèves. Puis, nous ajoutons les prénoms à la liste « first_names ».
Utiliser Range pour itérer :
La fonction range nous permet d’itérer sur une suite de nombres définis sur un certain intervalle. Ci-dessous, nous affichons la valeur de chaque nombre entier dans l’intervalle [0, 5[ (on note que 0 est inclus mais 5 est exclu).
Par défaut, la fonction range prend 0 en valeur de départ, mais il est également possible de changer la valeur de départ.
La fonction range permet également de changer le pas (ou step en anglais) entre chaque chaque valeur sur l’intervalle :
Grâce à la fonction range, il est également possible d’itérer dans le sens inverse en prenant un pas négatif :
Utiliser des itérations imbriquées
Une boucle imbriquée ou (nested iteration) est une boucle située à l’intérieur d’une autre boucle. La boucle imbriquée sera exécutée pour chaque itération de la boucle située au-dessus.
Dans l’exemple ci-dessous, nous itérons sur chaque prénom de la liste « first_names » qui est de type string. Puis grâce à une boucle imbriquée, nous itérons sur chaque lettre du prénom et affichons la lettre, son numéro, et le numéro du prénom à laquelle la lettre appartient.
Utiliser enumerate pour bénéficier d’un compteur d’éléments automatique
Python dispose de la fonction enumerate() qui retourne pour chaque itération, un tuple contenant l’indice et la valeur de l’itérable à cet indice.
On notera que la sortie des trois derniers exemples est la même mais que le code des deux dernières solutions est plus optimisé.
Itérer sur plusieurs itérables en même temps avec Zip
Il est possible d’utiliser la fonction intégrée zip() pour itérer dans plusieurs itérables en même temps. Pour chaque itération, zip retourne un tuple qui rassemble les éléments situés à la même position de chacun des itérables.
Grâce à la boucle for et à zip, nous pouvons ici créer une liste « names » composée du prénom et du nom de chaque étudiant.
Sortir d’une boucle avec l’instruction Break
Il est possible de quitter une boucle si une condition particulière est rencontrée en utilisant « break ». Tant que la condition n’est pas vérifiée, la boucle est exécutée normalement. Dès que la condition est vraie, le programme sort de la boucle et passe à l’instruction après celle-ci.
Une expression logique est utilisée pour vérifier la condition. Par exemple, ci-dessus, nous quittons la boucle si le type d’un élément de la liste n’est pas de type string. La boucle a été quittée avant d’afficher l’élément à l’index 2, qui est de type int et non string.
Passer à l’itération suivante en sautant l’itération actuelle avec l’instruction continue
Il est possible de sauter l’itération dans laquelle on est si une condition particulière est rencontrée en utilisant l’instruction de python « continue ». Si la condition est vraie, le programme restera dans la boucle mais passera directement à l’itération suivante.
Nous voyons ci-dessus que la boucle a été exécutée sauf à l’index n°2 où le type de l’élément est int.
List Comprehensions
Pour simplifier l’écriture des boucles for sur des listes, il est possible de passer par les List Comprehensions qui permettent, entre autres, de faciliter la déclaration ou la modification de variables de type liste.
Il est également possible d’utiliser des List Comprehensions imbriquées, afin de créer des listes à plusieurs dimensions.
Itérer sur un dictionnaire
Il est possible de répéter une instruction sur un dictionnaire grâce à la méthode .items().
Python permet également l’utilisation de compréhensions sur des dictionnaires appelés Dict Comprehensions :
Itérer sur un Numpy Array
Il est possible d’itérer sur les différentes dimensions d’un Numpy array grâce à des boucles for :
Grâce à la fonction nditer et une boucle, il est également possible d’accéder directement à chaque élément contenu dans notre array Numpy.
Itérer sur un dataframe Pandas
Pour itérer sur chaque ligne d’un dataframe Pandas, il est possible d’utiliser iterrows.
Quelques mots pour conclure
Au cours de cet article, nous avons vu que les boucles for nous permettent de gagner un temps précieux et d’optimiser notre code. Nous avons vu comment les utiliser, d’un niveau basique à avancé. Pour prendre en main cet incontournable de la programmation, n’hésitez pas à pratiquer et à les utiliser sur différents types d’objets. Les boucles for sont en effet utilisées dans tous les métiers de la data. Si vous envisagez de vous former à un de ces métiers, n’hésitez pas à consulter nos différents cursus.