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 pour dans tels que .
En Python la syntaxe est:
[ <expr> for <name> in <iterable> ]
[ <expr> for <name> in <iterable> if <condition> ]
Où :
expressionest l’opération ou la fonction à appliquer à chaque élément de l’itérable.iterableest la liste -- ou plus généralement l’objet itérable -- dont on souhaite traiter les éléments.nameest une variable temporaire qui représente chaque élément de l’itérable.conditionest 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 où est dans :
[i**2 for i in [1, 3, 7]][1, 9, 49]La même où parcourt l’intervale :
[i**2 for i in range(0, 10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]La liste des dans l’intervale tels que 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 SOLUTIONBilan¶
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.