Notes d'apprentissage de Python : les boucles for et enumerate
Contenu
Contexte
Python est un langage de programmation très abordable que l’on démarre en programmation ou que l’on connaisse déjà d’autres langages. Néanmoins, ce n’est pas parce qu’un langage est abordable qu’il n’a pas ses propres idiomes et qu’il n’y a pas des trucs & astuces à connaître et à retenir.
Ci-après, une petite note d’apprentissage de Python, sur l’utilisation de enumerate
.
NB : c’est du Python 3 qui est utilisé.
Si les éléments de ma liste étaient comptés
En Python, le for
n’est pas comme le for
du langage C dans lequel pour itérer sur un tableau, on fait varier la valeur de l’indice de ce tableau. En Python, le for
permet d’itérer sur chacun des éléments de la séquence : la variable de boucle va successivement prendre la valeur de chacun des éléments du tableau.
Voyons un exemple simple avec une liste de nombres :
|
|
Cela donne comme résultat si on exécute ce script :
|
|
La variable de boucle a bien pris successivement la valeur de chacun des éléments de la liste.
Cependant, comment fait-on si on souhaite avoir également l’indice de l’élément de la liste ?
Une manière naïve de le faire est d’utiliser range
, en créant un intervalle de 0 à la taille de la liste, comme dans l’exemple ci-après.
|
|
Cela donne comme résultat :
|
|
Cela fonctionne mais cela ne semble pas très élégant. Python propose une solution naive pour avoir l’indice et la valeur, en utilisant enumerate
(vous ne l’aviez pas vu venir ? ;-) ). Voici sans plus tarder un exemple :
|
|
Ce qui donne :
|
|
enumerate
énumère pour chacun des éléments de la liste en paramètre, son indice et la valeur associée.
Si cela fonctionne avec un for
, cela fonctionne aussi avec une compréhension :
|
|
Ce qui donne :
|
|
Et si on n’a besoin que de l’indice ? Pas de soucis, il suffit d’ignorer la valeur en utilisant classiquement le underscore _
comme nom de variable pour la valeur que l’on souhaite ignorer :
|
|
Ce qui donne :
|
|
On peut utiliser enumerate
indépendamment d’une boucle for
directement pour créer une liste de tuples (indice, valeur)
à partir d’une liste de valeurs :
|
|
Ce qui donne :
|
|
Enfin enumerate
peut s’utiliser avec d’autres itérables comme les tuples, les chaines de caractères ou les ensembles :
|
|
Ce qui donne :
|
|
Vous noterez que pour le set
, la liste de tuples ne correspond pas à l’ordre de saisie, ce qui est normal puisque les set
sont non-ordonnés en Python.
En bref
Quand vous avez besoin d’avoir l’indice associé à l’élément d’une séquence, pensez à utiliser enumerate
!
Un gist avec tous les exemples ci-dessus regroupés.
Laissons le mot de la fin à Boromir :
Auteur TGITS
Modifié 2020-10-24