On peut ajouter une condition if à la fin d'une list comprehension pour ne garder que certains éléments.
Syntaxe
[expression for variable in sequence if condition]Lecture : "je veux une liste qui contient expression pour chaque variable dans sequence, mais seulement SI condition est vraie".
Équivalent en boucle classique :
resultat = []
for variable in sequence:
if condition:
resultat.append(expression)# Nombres pairs de 0 à 20
[x for x in range(21) if x % 2 == 0]
# → [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]# Notes au-dessus de 10
notes = [8, 15, 3, 18, 12, 7]
[n for n in notes if n >= 10]
# → [15, 18, 12]# Mots de plus de 4 lettres
mots = ['si', 'python', 'or', 'data']
[m for m in mots if len(m) > 4]
# → ['python']L'expression à gauche peut transformer l'élément, le if à droite filtre :
# Carrés des nombres pairs
[x ** 2 for x in range(10) if x % 2 == 0]
# → [0, 4, 16, 36, 64]# Mots longs en majuscules
[m.upper() for m in mots if len(m) > 3][x if x > 0 else 0 for x in nombres] # if/else À GAUCHE : remplace les négatifs par 0 (garde TOUS les éléments)
[x for x in nombres if x > 0] # if À DROITE : filtre, garde seulement les > 0C'est la confusion la plus fréquente. Mémo : if seul à droite = filtre, if/else à gauche = expression conditionnelle.
Modulo (%) renvoie le reste. n % 2 == 0 signifie "n est pair".
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →