
List Comprehensions en Python
À quoi ça sert : une list comprehension ?
Une List Comprehension en Python est un mécanisme introduit dans la version 2.7 et présent dans toutes les versions suivantes. Son but est de générer rapidement une liste à partir d’un objet itérable. C’est utile lorsque l’on veut filtrer une liste ou effectuer une opération sur une liste.
Et concrètement, ça donne quoi ?
Prenons un exemple simple. On veut obtenir une liste où les éléments sont les mêmes qu’une autre liste, mais incrémentés. On peut alors naturellement déclarer une liste puis la parcourir pour y traiter chaque élément :

La méthode ci-dessus est simple et intuitive mais nous pouvons écrire ce bout de code de manière plus succincte en Python grâce aux List Comprehension :

Grâce à cette même expression, il nous est aussi possible de filtrer les éléments insérés en plus d’effectuer un traitement sur ces mêmes éléments :

D’accord ! Mais comment ça marche ?
Pour comprendre comment fonctionnent les List Comprehensions il nous faut les décomposer.
Elles sont composées de trois parties :
- Une expression : Utilisée pour effectuer un traitement sur les données parcourues.
- Un objet itérable : Dans lequel on va itérer pour créer notre liste.
- Une condition (optionnel) : Si jamais on veut filtrer les données à insérer dans la liste résultat.
[<expression> for x in <iterable> <condition>]
Exemple :
[x * 2 for x in range(10) if x % 2 != 0]
Cette expression renvoie une liste qui contient le double des nombres impairs de 0 à 10.
Autres exemples :
Il est possible de créer une liste de tuples à partir d’une ou plusieurs listes, comme il est possible de créer une liste à la place de tuple :

Une chaîne de caractères étant un objet itérable, il est donc possible d’utiliser une List Comprehension de la même manière. Ici on veut créer une liste contenant toutes les lettres de cette chaîne de caractères en majuscule :

Il est même possible d’imbriquer les List Comprehensions, cependant même si cela permet d’écrire des formules complexes en une ligne, cela peut aussi rendre le code plus confus :

Les autres utilisations
Nous allons maintenant voir comment générer d’autres types de structures grâce à ces expressions. Nous ne rentrerons donc pas dans le détail des structures en question.
Set
Nous pouvons grâce à cette syntaxe, générer un ensemble ou set avec la même syntaxe, mais en changeant tout simplement les crochets par des accolades :

Dictionnaires
Dans le même esprit que les ensembles, nous pouvons générer les dictionnaires, en renseignant deux expressions séparées par un ‘:’ (deux-points) :

Generators
Une autre utilisation de ces expressions est de produire des generators. La forme reste inchangée par rapport à celle d’une liste, il suffit juste de changer les crochets par des parenthèses.

Nous expliquerons les generators et leurs utilisations dans un autre article.
Cet article a été Rédigé par :
