Les compréhensions
Une compréhension construit une nouvelle collection à partir d'une séquence, en une seule expression. C'est exactement la boucle for + append du Pro (Pro, épisode 6), écrite autrement.
La boucle que tu sais écrire :
brut = ["8,0", "14,5", "22,0", "n.m.", "40,0"]
tailles = []
for texte in brut:
if texte != "n.m.":
tailles.append(float(texte.replace(",", ".")))
print(tailles)La même, en compréhension :
brut = ["8,0", "14,5", "22,0", "n.m.", "40,0"]
tailles = [float(texte.replace(",", ".")) for texte in brut if texte != "n.m."]
print(tailles)Les deux affichent [8.0, 14.5, 22.0, 40.0]. Lis la compréhension dans cet ordre : pour chaque texte dans brut, si texte != "n.m.", garde float(texte.replace(",", ".")). Les morceaux sont ceux de la boucle, dans le même ordre, sauf l'expression gardée, qui passe devant.
Les trois formes.
releves = [(1, 8.0), (2, 14.5), (3, 22.0), (4, 31.5)]
carres = [semaine ** 2 for semaine, hauteur in releves]
par_semaine = {semaine: hauteur for semaine, hauteur in releves}
dates = ["2026-03-30", "2026-04-06", "2026-04-13", "2026-05-04"]
mois = {date[:7] for date in dates}
print(carres)
print(par_semaine)
print(sorted(mois))
print([h for s, h in releves if h > 20])Affiche :
| Forme | Écriture | Résultat |
|---|---|---|
| liste | [expression for x in séquence] | une liste, dans l'ordre |
| liste filtrée | [expression for x in séquence if condition] | seulement les éléments qui passent le filtre |
| dictionnaire | {cle: valeur for x in séquence} | un dictionnaire (Pro, épisode 8) |
| ensemble | {expression for x in séquence} | un ensemble, sans doublon ('2026-04' n'apparaît qu'une fois) |
Le déballage des tuples (for semaine, hauteur in releves) fonctionne comme dans une boucle.
Deux pièges.
- Si l'expression gardée est un tuple, il faut des parenthèses :
[semaine, hauteur * 10 for semaine, hauteur in releves]s'arrête surSyntaxError: did you forget parentheses around the comprehension target?(« as-tu oublié les parenthèses autour de la cible de la compréhension ? ») ; on écrit[(semaine, hauteur * 10) for …]. - Une compréhension sert à construire une collection, pas à faire quelque chose.
[print(t) for t in tailles]affiche bien les valeurs… et construit pour rien la liste[None, None, None](ce que renvoieprint). Pour afficher, écrire, modifier : une boucle.
Quand garder la boucle. Dès qu'il y a un affichage, une écriture dans un fichier, plusieurs étapes, ou une compréhension dans une compréhension : la boucle est plus lisible (Pro, épisode 9). Une compréhension se relit en une phrase ; si la phrase est trop longue, c'est le signe.