OUJOOD.COM
Pourquoi utiliser la compréhension de listes ?
Quand on débute en Python, on crée des listes avec une boucle for : on initialise une liste vide, on parcourt une séquence, et on ajoute chaque élément avec .append(). Ça fonctionne, mais Python propose une syntaxe plus courte pour exactement ce cas de figure : la compréhension de listes.
Dans le code Python professionnel, cette syntaxe est omniprésente. Savoir la lire et l'écrire devient indispensable dès qu'on lit du code écrit par d'autres.
Syntaxe de base
La structure générale est la suivante : on écrit l'expression souhaitée, puis le for qui itère sur une séquence, le tout entre crochets. Le résultat est une nouvelle liste.
# Syntaxe générale nouvelle_liste = [expression for element in iterable] # Équivalent avec une boucle for classique nouvelle_liste = [] for element in iterable: nouvelle_liste.append(expression)
Les deux blocs produisent le même résultat. La compréhension de listes condense tout en une seule ligne.
Premier exemple concret
On veut créer une liste contenant le carré des nombres de 1 à 5. Voici la comparaison entre les deux approches :
# Méthode classique avec boucle for carres = [] for n in range(1, 6): carres.append(n ** 2) print(carres) # [1, 4, 9, 16, 25] # Même résultat avec une compréhension de listes carres = [n ** 2 for n in range(1, 6)] print(carres) # [1, 4, 9, 16, 25]
Ajouter un filtre avec if
On peut ajouter une condition if à la fin pour ne garder que certains éléments. Elle se lit comme un filtre : seuls les éléments pour lesquels la condition est vraie sont ajoutés à la nouvelle liste.
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Garder uniquement les nombres pairs pairs = [n for n in nombres if n % 2 == 0] print(pairs) # [2, 4, 6, 8, 10] # Garder les mots de plus de 4 lettres mots = ["chat", "éléphant", "rat", "girafe", "âne"] longs = [mot for mot in mots if len(mot) > 4] print(longs) # ['éléphant', 'girafe']
Transformer les éléments
L'expression placée en tête de la compréhension peut être n'importe quelle opération sur l'élément : calcul, appel de méthode, conversion de type.
prenoms = ["alice", "bob", "carla", "david"] # Mettre chaque prénom en majuscules majuscules = [p.upper() for p in prenoms] print(majuscules) # ['ALICE', 'BOB', 'CARLA', 'DAVID'] # Obtenir la longueur de chaque mot longueurs = [len(p) for p in prenoms] print(longueurs) # [5, 3, 5, 5] # Convertir des chaînes en entiers valeurs = ["10", "20", "30", "40"] entiers = [int(v) for v in valeurs] print(entiers) # [10, 20, 30, 40]
Combiner transformation et filtre
On peut transformer et filtrer en même temps. L'ordre est toujours : expression — for — if.
notes = [8, 12, 15, 7, 18, 9, 14] # Doubler uniquement les notes supérieures à 10 boostees = [n * 2 for n in notes if n > 10] print(boostees) # [24, 30, 36, 28] # Mettre en majuscules les prénoms commençant par une voyelle prenoms = ["alice", "bob", "emma", "omar", "pierre"] voyelles = "aeiouAEIOU" resultat = [p.upper() for p in prenoms if p[0] in voyelles] print(resultat) # ['ALICE', 'EMMA', 'OMAR']
Utiliser if...else dans une compréhension
Quand on veut choisir entre deux valeurs (pas juste filtrer), la condition if/else se place avant le for. C'est la règle à retenir : if seul (filtre) → après le for ; if/else (choix) → avant le for.
notes = [8, 12, 15, 7, 18, 9, 14] # Remplacer chaque note par "Reçu" ou "Recalé" mentions = ["Reçu" if n >= 10 else "Recalé" for n in notes] print(mentions) # ['Recalé', 'Reçu', 'Reçu', 'Recalé', 'Reçu', 'Recalé', 'Reçu'] # Remplacer les valeurs négatives par 0 valeurs = [5, -3, 8, -1, 12, -7, 4] positives = [v if v >= 0 else 0 for v in valeurs] print(positives) # [5, 0, 8, 0, 12, 0, 4]
Compréhensions imbriquées
On peut imbriquer deux boucles dans une compréhension. Utile pour aplatir une liste de listes ou générer des combinaisons. Les boucles se lisent de gauche à droite, comme des for classiques empilés.
# Aplatir une liste de listes matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] aplatie = [n for ligne in matrice for n in ligne] print(aplatie) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # Générer toutes les combinaisons de deux listes couleurs = ["rouge", "bleu"] tailles = ["S", "M", "L"] combinaisons = [(c, t) for c in couleurs for t in tailles] print(combinaisons)
Compréhension de listes ou générateur ?
La compréhension de listes crée toute la liste en mémoire d'un seul coup. Si on n'a pas besoin de stocker les résultats mais juste de les parcourir, un générateur (parenthèses à la place des crochets) calcule chaque valeur à la demande et consomme beaucoup moins de mémoire.
# Compréhension de listes : toute la liste en mémoire liste = [n ** 2 for n in range(1000000)] # Générateur : calcule chaque valeur à la demande generateur = (n ** 2 for n in range(1000000)) # Pour juste parcourir les valeurs, le générateur suffit for valeur in generateur: print(valeur) break # On s'arrête au premier pour l'exemple
Autre cas où la compréhension de listes devient contre-productive : quand la logique est trop complexe. Si la condition nécessite trois niveaux d'imbrication, une boucle for classique reste plus lisible.
Pour approfondir les méthodes de liste (append(), sort(), pop()…), consultez le cours complet sur les listes en Python.
Par carabde | Mis à jour le 24 avril 2026