Compréhensions#
courant
Liste#
[x**2 for x in range(10)]
[x for x in range(20) if x % 2 == 0]
[x if x % 2 == 0 else -x for x in range(5)] # if/else en expression
[x*y for x in range(3) for y in range(3)] # boucles imbriquées
Dictionnaire#
{x: x**2 for x in range(5)}
{k: v for k, v in d.items() if v > 0}
{v: k for k, v in d.items()} # inversion clé/valeur
Ensemble (set)#
Générateur#
(x**2 for x in range(10)) # évalué paresseusement, pas de liste en mémoire
sum(x**2 for x in range(10)) # parenthèses de l'appel suffisent
Équivalence avec une boucle for#
Quand éviter les compréhensions#
- Logique avec effets de bord (préférer une boucle
forclassique). - Compréhensions imbriquées de plus de 2 niveaux (nuit à la lisibilité).