Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

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)f(x) pour xx dans XX tels que c(x)c(x).

{f(x)xX,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ù :

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]
[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]
[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 i2i^2ii est dans {1,3,7}\{1, 3, 7\}:

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

La même où ii parcourt l’intervale [0,10[[0, 10[:

[i**2 for i in range(0, 10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

La liste des i2i^2 dans l’intervale [0,10[[0,10[ tels que ii n’est pas divisible par trois:

[i**2 for i in range(0, 10) if i % 3 != 0]
[1, 4, 16, 25, 49, 64]
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
### 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. Elle mets l’accent sur l’objet que l’on veut construire plus que sur comment le construire.

C’est un principe très général: outre une meilleure compréhensibilité, exprimer ainsi l’intention donne plus de latitude au système de calcul pour des optimisations. On retrouve ce principe dans la programmation fonctionnelle et les idiomes de vectorisation de Numpy, Pandas, etc.