Exercice 21 / 100

Filtrer avec comprehension

Liste des nombres pairs de 0 à 20 avec comprehension

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 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']

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

Modulo (%) renvoie le reste. n % 2 == 0 signifie "n est pair".

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →