Exercice 21 / 100

Filtrer avec comprehension

ConsigneListe des nombres pairs de 0 à 20 avec comprehension

📖 Cours

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)

Exemples

# 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 10notes = [8, 15, 3, 18, 12, 7][n for n in notes if n >= 10]# → [15, 18, 12]
# Mots de plus de 4 lettresmots = ['si', 'python', 'or', 'data'][m for m in mots if len(m) > 4]# → ['python']

Combiner transformation ET filtre

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]

⚠ Ne pas confondre avec if/else dans l'expression

[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 > 0

C'est la confusion la plus fréquente. Mémo : if seul à droite = filtre, if/else à gauche = expression conditionnelle.

Un if seul à droite filtre et retire des éléments, un if/else à gauche les garde tous et remplace seulement certaines valeurs
Un if seul à droite filtre et retire des éléments, un if/else à gauche les garde tous et remplace seulement certaines valeurs

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 →