Aller au contenu

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)#

{x % 3 for x in range(10)}

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#

carres = [x**2 for x in range(10)]

carres = []
for x in range(10):
    carres.append(x**2)

Quand éviter les compréhensions#

  • Logique avec effets de bord (préférer une boucle for classique).
  • Compréhensions imbriquées de plus de 2 niveaux (nuit à la lisibilité).
# À éviter : trop dense
resultat = [transformer(x) for x in donnees if valider(x) if x not in exclus]