Compréhension de listes#
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)\).
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]
[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.
Voici un autre exemple : la liste des \(i^2\) où \(i\) est dans \(\{1, 3, 7\}\):
[ i**2 for i in [1, 3, 7] ]
[1, 9, 49]
La même où \(i\) parcoure l’intervale \([0, 10[\):
[ i**2 for i in range(0, 10) ]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
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]
[1, 4, 16, 25, 49, 64]
Exercice
À partir de la liste
a
ci-dessous, construisez une nouvelle listeb
ne contenant que les valeurs dea
supérieures à 5, en utilisant une bouclefor
et la méthodeappend
:
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
Construisez à nouveau
b
en utilisant maintenant une compréhension.
### BEGIN SOLUTION
b = [x for x in a if x > 5]
### END SOLUTION
À faire
Conclusion/rappel sur la concision de la notation, sa proximité avec la notation mathématique des ensembles, le fait qu’avec une compréhension on décrit ce que l’on veut obtenir plutôt que comment on veut l’obtenir.