Listes en compréhension

Contenu

Listes en compréhension#

Les compréhensions sont un moyen confortable de construire des listes (ou autres collections) en décrivant tous les éléments, avec une syntaxe proche de la notation mathématiques pour l’ensemble des \(f(x)\) pour \(x\) dans \(X\) tels que \(c(x)\).

\[ \{ f(x) \mid x\in X, c(x) \}\]

En Python la syntaxe est:

      [ <expr> for <name> in <iterable> ]
      [ <expr> for <name> in <iterable> if <condition> ]

Où :

  • expression est l’opération ou la fonction à appliquer à chaque élément de l’itérable.

  • name est une variable temporaire qui représente chaque élément de l’itérable.

  • iterable est la liste ou l’objet itérable dont on souhaite traiter les éléments.

  • condition est une condition optionnelle pour filtrer les éléments de l’itérable.

Supposons que nous ayons une liste de nombres et que nous voulions créer une nouvelle liste contenant les carrés de ces nombres. Voici comment nous pourrions utiliser une compréhension de liste pour accomplir cela :

nombres = [1, 2, 3, 4, 5]
carres = [x**2 for x in nombres]
print(carres)  # Résultat : [1, 4, 9, 16, 25]

Dans cet exemple, x**2 est l’expression qui calcule le carré de chaque élément, et x est la variable temporaire qui représente chaque élément de la liste nombres.

Il est possible d’ajouter une condition pour filtrer les éléments de la liste d’entrée. Par exemple, si nous voulons obtenir les carrés des nombres pairs uniquement, nous pouvons ajouter une condition if comme suit :

nombres = [1, 2, 3, 4, 5]
carres_pairs = [x**2 for x in nombres if x % 2 == 0]
print(carres_pairs)  # Résultat : [4, 16]

Dans cet exemple, la condition x % 2 == 0 vérifie si un nombre est pair.

Source

Voici un autre exemple : la liste des \(i^2\)\(i\) est dans \(\{1, 3, 7\}\):

[ i**2 for i in [1, 3, 7] ]

La même où \(i\) parcoure l’intervale \([0, 10[\):

[ i**2 for i in range(0, 10) ]

La liste des \(i^2\) dans l’intervale \([0,10[\) tels que \(i\) n’est pas divisible par trois:

[ i**2 for i in range(0, 10) if i % 3 != 0]

Exercice

  1. À partir de la liste a ci-dessous, construisez une nouvelle liste b ne contenant que les valeurs de a supérieures à 5, en utilisant une boucle for et la méthode append:

a = [1, 4, 2, 7, 1, 9, 0, 3, 4, 6, 6, 6, 8, 3]
b = []
### BEGIN SOLUTION
for x in a:
    if x > 5:
        b.append(x)
### END SOLUTION
  1. Construisez à nouveau b en utilisant maintenant une compréhension.

### BEGIN SOLUTION
b = [x for x in a if x > 5]
### END SOLUTION

Bilan#

Les compréhensions offrent une notation concise, élégante et efficace pour construire une liste en spécifiant les éléments qui la compose. Cette notation est proche de la notation mathématique pour décrire un ensemble, et mets l’accent sur l’objet que l’on veut construire plus que sur comment le construire.