📊python

Les comprehensions de listes en Python expliquees

30 mars 2026 5 min de lecture

Introduction : Pourquoi les list comprehensions sont-elles géniales ?

Salut ! Si tu es en spécialité NSI, tu as sûrement déjà créé des listes en Python avec des boucles for. C'est efficace, mais parfois un peu long à écrire. Et si je te disais qu'il existe une manière plus élégante, concise et rapide de générer des listes ? C'est exactement le rôle des list comprehensions, ou compréhensions de listes en français. C'est une fonctionnalité phare de Python que tu vas rencontrer partout, dans les exercices, les projets et même dans le code des professionnels. Maîtriser cette syntaxe, c'est faire un pas de géant vers l'écriture d'un code Pythonique et efficace. Prêt à découvrir ce super-pouvoir ? C'est parti !

La syntaxe de base : Transformer une boucle for classique

Imaginons que tu veuilles créer une liste contenant les carrés des nombres de 0 à 9. La méthode classique avec une boucle for ressemble à ça :

carres = []
for nombre in range(10):
carres.append(nombre ** 2)
print(carres) # Affiche [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Avec une list comprehension, on obtient exactement le même résultat, mais en une seule ligne ! Voici la formule magique :

carres = [nombre ** 2 for nombre in range(10)]
print(carres) # Affiche le même résultat !

Décomposons cette syntaxe ensemble :

  • Elle commence et se termine par des crochets [], car on crée une liste.
  • Au centre, on a une expression : nombre ** 2. C'est ce qui sera placé dans la nouvelle liste pour chaque élément.
  • Ensuite, on a le mot-clé for.
  • Enfin, on retrouve la boucle classique : nombre in range(10).

En résumé, on lit la ligne de droite à gauche : « Pour chaque nombre dans range(10), ajoute nombre ** 2 à la liste ». Beaucoup plus direct, non ?

Ajouter des conditions avec if (et même else !)

La vraie puissance des comprehensions de listes apparaît quand on veut filtrer les résultats. Supposons que tu ne veuilles que les carrés des nombres pairs entre 0 et 9. Avec une boucle classique, tu ajoutes un if. Avec une list comprehension, c'est tout aussi simple.

Filtrer avec if

La condition if se place à la fin de l'expression.

carres_pairs = [nombre ** 2 for nombre in range(10) if nombre % 2 == 0]
print(carres_pairs) # Affiche [0, 4, 16, 36, 64]

On lit : « Pour chaque nombre dans range(10) si le nombre est pair (nombre % 2 == 0), ajoute son carré à la liste ».

Choisir avec if/else (expression conditionnelle)

Parfois, tu veux appliquer une transformation différente selon une condition. Par exemple, mettre "pair" ou "impair" dans une liste. Pour cela, l'ordre change : l'expression conditionnelle (if/else) se place au début, juste après le crochet ouvrant.

resultat = ["pair" if nombre % 2 == 0 else "impair" for nombre in range(5)]
print(resultat) # Affiche ['pair', 'impair', 'pair', 'impair', 'pair']

Attention à ne pas confondre les deux syntaxes ! if seul à la fin pour filtrer, if/else au début pour transformer.

Cas pratiques et exemples avancés pour la NSI

Voyons maintenant comment utiliser cette technique dans des situations typiques de ton programme de NSI.

Nettoyer et transformer des données

Tu as une liste de chaînes de caractères (des mots) et tu veux les mettre en majuscule, mais seulement si leur longueur est supérieure à 3.

mots = ["le", "python", "c'est", "super", "!"]
mots_filtres = [mot.upper() for mot in mots if len(mot) > 3]
print(mots_filtres) # Affiche ['PYTHON', 'SUPER']

Créer une matrice (liste de listes)

Les list comprehensions peuvent être imbriquées ! C'est très utile pour créer des matrices, par exemple une table de multiplication 3x3.

table_multiplication = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(table_multiplication) # Affiche [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

Lis de l'intérieur vers l'extérieur : d'abord, pour un i fixé, on crée la liste [i*1, i*2, i*3]. Ensuite, on fait cela pour chaque i de 1 à 3.

Extraire des données d'une liste de dictionnaires

Imaginons que tu traites des données JSON ou une liste d'objets. Tu peux extraire facilement un champ précis.

eleves = [{"nom": "Alice", "note": 17}, {"nom": "Bob", "note": 12}, {"nom": "Clara", "note": 15}]
notes = [eleve["note"] for eleve in eleves]
print(notes) # Affiche [17, 12, 15]

Quand (ne pas) utiliser les list comprehensions ?

Les list comprehensions sont géniales, mais ce n'est pas une solution universelle.

  • À utiliser quand : L'opération est simple, lisible sur une ligne, et que tu veux créer une nouvelle liste à partir d'une séquence existante. C'est parfait pour du mapping (transformation) et du filtering (filtrage).
  • À éviter quand : La logique devient trop complexe (avec plusieurs conditions imbriquées ou des traitements d'erreur). Si ta list comprehension s'étend sur plusieurs lignes et devient illisible, reviens à une bonne vieille boucle for. La lisibilité du code est primordiale en Python.
  • Performance : Elles sont généralement légèrement plus rapides qu'une boucle for classique car optimisées en interne par Python. Pour de grandes quantités de données, c'est un petit plus.

Ton objectif en NSI n'est pas d'écrire le code le plus cryptique, mais le plus clair et efficace. Utilise les list comprehensions avec discernement !

Conclusion et prochaines étapes

Tu as maintenant une arme secrète dans ta boîte à outils Python ! Les comprehensions de listes te permettent d'écrire un code plus concis, plus lisible (une fois habitué) et souvent plus performant. N'hésite pas à t'entraîner en repensant tes anciennes boucles for qui créent des listes. Tu verras, ça devient vite un réflexe.

Et ce n'est que le début ! Python propose aussi des comprehensions d'ensembles ({x for x in ...}) et de dictionnaires ({cle: valeur for ...}) sur le même principe. Une fois les listes maîtrisées, tu pourras facilement passer à ces autres structures. Bon code !

📚 Pour aller plus loin

Questions fréquentes

Est-ce que les list comprehensions sont plus rapides que les boucles for classiques ?

Oui, généralement, les list comprehensions sont légèrement plus rapides car elles sont optimisées en interne par l'interpréteur Python (écrites en C). Cependant, la différence est souvent négligeable pour de petites listes. Le gain principal reste la concision et la lisibilité du code.

Peut-on mettre plusieurs conditions 'if' dans une list comprehension ?

Absolument ! Tu peux enchaîner plusieurs conditions 'if' pour filtrer plus précisément. Par exemple : `[x for x in range(20) if x % 2 == 0 if x > 10]` crée la liste des nombres pairs supérieurs à 10. Tu peux aussi utiliser les opérateurs `and` et `or` dans une seule condition.

Les list comprehensions fonctionnent-elles avec les strings (chaînes de caractères) ?

Oui, tout à fait ! Une string est une séquence, comme une liste. Tu peux l'utiliser dans une list comprehension. Par exemple, `[lettre for lettre in "NSI"]` donne `['N', 'S', 'I']`. C'est très utile pour traiter du texte caractère par caractère ou mot par mot.

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
comprehension liste Pythonlist comprehension
Pixel