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
[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ératriceExemple
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
- 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.
- 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.
- 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.
- 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.
- 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
- ListesUne liste est une suite ordonnée et modifiable de valeurs, indexée à partir de 0. C'est la structure de base pour stocker une série de notes, de ventes ou de lignes à traiter dans l'ordre.
- DictionnairesUn dictionnaire associe des clés uniques à des valeurs, comme une fiche ou une ligne de table. On s'en sert pour retrouver une information par son identifiant, compter ou regrouper.
- Générateurs (yield)Un générateur produit ses valeurs une à une avec yield, à la demande, au lieu de tout construire en mémoire. Il convient aux gros fichiers, aux flux de logs et aux suites lues une seule fois.
- sorted, min, maxsorted, min et max trient ou extraient les extrêmes, et leur paramètre key choisit le critère : une colonne, une longueur, un calcul. C'est l'usage le plus courant des fonctions lambda.