Aller au contenu
Structures

Compréhensions

Une compréhension construit une liste, un dictionnaire ou un ensemble en une seule expression qui transforme et filtre. Employez-la dès qu'une boucle ne sert qu'à remplir une collection.

  • list comprehension
  • compréhension
  • dict
  • set
  • générateur
  • filtre

Syntaxe

Modèle
[expr for x in iterable if condition]     # liste{cle: val for x in iterable}              # dictionnaire{expr for x in iterable}                  # ensemble(expr for x in iterable)                  # expression génératrice

Exemple

Exemple concret
notes = {"Ana": 14, "Bob": 8, "Chloé": 17, "David": 11}admis = [nom for nom, n in notes.items() if n >= 10]print(admis)                    # → ['Ana', 'Chloé', 'David']sur_100 = {nom: n * 5 for nom, n in notes.items()}print(sur_100["Chloé"])         # → 85initiales = {nom[0] for nom in notes}print(sorted(initiales))        # → ['A', 'B', 'C', 'D']print(sum(n for n in notes.values() if n >= 10))  # → 42mentions = ["admis" if n >= 10 else "ajourné" for n in notes.values()]print(mentions)                 # → ['admis', 'ajourné', 'admis', 'admis']

À retenir

  1. Le filtre if se place à la fin et écarte des éléments ; l'expression conditionnelle a if c else b se place au début et transforme chaque élément sans en écarter.
  2. Entre parenthèses, c'est une expression génératrice qui ne construit aucune liste en mémoire : sum(x for x in …), any(…) et max(…) en profitent directement.
  3. Deux for s'enchaînent dans l'ordre des boucles imbriquées : [c for ligne in grille for c in ligne] aplatit une liste de listes.
  4. Piège : une compréhension illisible est pire qu'une boucle. Au-delà d'un filtre et d'une transformation simples, revenez à un for classique.
  5. Piège : une compréhension sert à construire une collection, pas à provoquer des effets. [print(x) for x in l] fabrique une liste de None inutile ; écrivez une boucle.

Voir aussi