logo oujood
🔍

La compréhension de listes en Python

La compréhension de listes (list comprehension) permet de créer une liste en une seule ligne de code, là où une boucle for classique en nécessiterait trois ou quatre. C'est l'une des fonctionnalités qui rendent Python si agréable à écrire.

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.

  📋 Copier le code

# 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 :

  📋 Copier le code

# 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.

  📋 Copier le code

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.

  📋 Copier le code

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.

  📋 Copier le code

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.

  📋 Copier le code

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.

  📋 Copier le code

# 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.

  📋 Copier le code

# 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