Compréhension de liste en Python – avec des exemples

Photo of author

By pierre



En Python, les listes en compréhension offrent une méthode élégante pour générer de nouvelles listes à partir de séquences existantes, qu’il s’agisse de listes, de chaînes ou de tuples.

Grâce à leur syntaxe concise, la création de listes devient une opération réalisable en une seule ligne de code. Ce guide vous accompagnera dans la maîtrise de cette technique.

Au cours de cette exploration, vous découvrirez :

  • La méthode traditionnelle de création de listes via les boucles for,
  • La syntaxe spécifique à employer pour les listes en compréhension en Python, et
  • La façon d’intégrer des conditions if pour affiner la logique des listes en compréhension.

De plus, des exemples pratiques et variés vous seront proposés pour une assimilation optimale de ce concept.

Commençons sans plus tarder. 🚀

Création de listes Python à l’aide de boucles for

Imaginons que vous possédiez une liste de nombres entiers et que vous souhaitiez créer une nouvelle liste contenant le cube de chacun de ces nombres. Voici la procédure à suivre en utilisant une boucle for en Python :

nums = [2,3,5,7]
num_cubes = []
for num in nums:
  num_cubes.append(num**3)

print(num_cubes)

# Output
[8, 27, 125, 343]

Le code présenté fonctionne comme suit :

  • Une liste vide, num_cubes, est initialisée.
  • La liste des nombres est parcourue élément par élément.
  • Pour chaque nombre num, son cube est calculé à l’aide de l’opérateur d’exponentiation : num**3.
  • La valeur cubique est ensuite ajoutée à la liste num_cubes.

Il est important de noter qu’en Python, l’opérateur d’exponentiation ** s’utilise avec la syntaxe : num**pow, où le nombre num est élevé à la puissance pow.

Toutefois, une approche plus simple est possible grâce aux listes en compréhension. Penchons-nous sur leur syntaxe.

La syntaxe des listes en compréhension en Python

Voici la structure générale des listes en compréhension :

<nouvelle_liste> = [<expression> for <element> in <iterable>]

Décortiquons cette syntaxe.

  • En Python, les listes sont délimitées par des crochets [], la déclaration de compréhension de liste doit donc être placée entre ces crochets.
  • L’expression in signifie que vous itérez sur un objet itérable. Tout objet Python permettant l’itération et l’accès à ses éléments, comme les listes, les tuples ou les chaînes, est considéré comme itérable.
  • L’ est le résultat que vous souhaitez calculer pour chaque dans l’.

Cela semble simple, n’est-ce pas ?

En substance, l’objectif est d’appliquer une opération à chaque élément d’une liste (ou de tout objet itérable) afin de générer une nouvelle liste.

En appliquant cette logique, nous pouvons simplifier la syntaxe, comme illustré ci-dessous.

Syntaxe des listes en compréhension en Python (Image de l’auteur)

Maintenant que vous êtes familiarisé avec la syntaxe, passons à la pratique. Vous pouvez utiliser l’IDE Python en ligne de toptips.fr pour suivre les exemples qui vont suivre, ou les exécuter directement sur votre ordinateur.

Exemples d’utilisation des listes en compréhension Python

Dans la section précédente, vous avez créé la liste num_cubes à partir de la liste nums. Reprenons cet exemple en utilisant les listes en compréhension.

Listes en compréhension avec des nombres

Appliquons maintenant la syntaxe simplifiée :

  •  : L’opération à effectuer est de mettre chaque nombre au cube. Ainsi, devient num**3.
  •  : La variable d’itération est num, représentant les différents nombres de la liste.
  •  : La liste de base est nums.
  • L’expression finale est donc : [num**3 for num in nums]. ✅

Voici le code résultant :

num_cubes = [num**3 for num in nums]
print(num_cubes)

# Output
[8, 27, 125, 343]

Félicitations ! Vous avez créé votre première liste en compréhension. 🎉

Passons à d’autres exemples en utilisant cette fois-ci des chaînes de caractères.

Listes en compréhension avec des chaînes de caractères

Considérez une liste d’auteurs. Vous pouvez bien sûr adapter cette liste avec vos propres auteurs préférés. 😄

authors = ["jane austen","george orwell","james clear","cal newport"]

Notez que les noms d’auteurs sont en minuscules. Nous allons les mettre en forme en respectant la casse du titre et les stocker dans une nouvelle liste appelée author_list.

Pour rappel, en Python, la méthode string title() prend une chaîne en argument et renvoie une copie de cette chaîne en appliquant la casse du titre. Autrement dit, la première lettre de chaque mot est en majuscule : Prénom Nom.

Voici la démarche à suivre :

  • Parcourir la liste des auteurs, et pour chaque auteur,
  • Appeler la méthode author.title() pour obtenir une copie de la chaîne avec la casse du titre.

Le code Python correspondant est le suivant :

authors = ["jane austen","george orwell","james clear","cal newport"]

author_list = [author.title() for author in authors]
print(author_list)

# Output
['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

Le résultat affiche les noms d’auteurs formatés avec la casse du titre, comme souhaité.

Listes en compréhension avec plusieurs listes

Jusqu’à présent, vous avez appris à créer des listes à partir d’une liste existante. Voyons maintenant comment générer une liste à partir de plusieurs listes.

Prenons l’exemple suivant : vous disposez de deux listes l_arr et b_arr contenant les longueurs et les largeurs de 4 rectangles.

Votre objectif est de créer une nouvelle liste, area, qui contienne l’aire de chacun de ces rectangles. (Rappel : aire = longueur * largeur).

l_arr = [4,5,1,3]
b_arr = [2,1,7,9]

Le calcul de l’aire nécessite les éléments des deux listes (l_arr et b_arr). Pour cela, la fonction zip() de Python est utile.

En Python, la fonction zip() prend en argument un ou plusieurs objets itérables avec la syntaxe zip(*iterables). Elle renvoie un itérateur de tuples, où le tuple i contient l’élément i de chaque objet itérable.

L’image ci-dessous explicite ce fonctionnement. Puisque l_arr et b_arr contiennent 4 valeurs, les indices vont de 0 à 3. Le tuple 0 est composé de l_arr[0] et b_arr[0] ; le tuple 1, de l_arr[1] et b_arr[1], et ainsi de suite.

Fonction zip() en Python (Image de l’auteur)

Vous pouvez donc parcourir zip(l_arr,b_arr) comme suit :

area = [l*b for l,b in zip(l_arr,b_arr)]
print(area)

# Output
[8,5,7,27]

Dans la partie suivante, vous apprendrez comment utiliser des instructions conditionnelles au sein des listes en compréhension.

Listes en compréhension Python avec conditions

Partons de la syntaxe que nous avons déjà explorée pour les listes en compréhension.

Voici la syntaxe à retenir :

<nouvelle_liste> = [<expression> for <element> in <iterable> if <condition>]

Au lieu de calculer l’ pour tous les éléments, vous ne le ferez que pour ceux qui remplissent une spécifique, où condition := True. La syntaxe simplifiée qui en résulte est la suivante :

Listes en compréhension avec conditions en Python (Image de l’auteur)

Passons maintenant aux exemples de code.

Exemples de listes en compréhension avec conditions

#1. Prenons la chaîne « J’apprends Python en 2022 ». Vous souhaitez créer une liste de tous les chiffres présents dans cette chaîne. Comment faire ?

En Python, la méthode .isdigit() appliquée à un caractère renvoie True s’il s’agit d’un chiffre (0-9), et False dans le cas contraire.

L’extrait de code ci-dessous illustre la façon de récupérer tous les chiffres de la chaîne str1 dans une liste :

str1 = "I'm learning Python3 in 2022"

digits = [char for char in str1 if char.isdigit()]

print(digits)

# Output
['3', '2', '0', '2', '2']

Dans ce code :

  • La chaîne str1 est parcourue,
  • Chaque caractère est testé à l’aide de la méthode isdigit() afin de déterminer s’il s’agit d’un chiffre, et
  • Le caractère est ajouté à la nouvelle liste digits uniquement s’il est effectivement un chiffre.

Voici un autre exemple.

#2. Vous avez une liste de fruits. 🍊 L’objectif est de créer une liste starts_with_b contenant tous les fruits qui commencent par la lettre « b ». La méthode startswith() est adaptée pour écrire la condition.

La méthode .startswith(‘char’) renvoie True si commence par le caractère ‘char’, et False sinon.

fruits = ['blueberry','apple','banana','orange','cherry']

starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')]

print(starts_with_b)

# Output
['blueberry', 'banana']

Le résultat contient les fruits « blueberry » et « banana », qui sont effectivement les seuls à commencer par « b » dans la liste de fruits initiale.

Ceci met fin à notre exploration des listes en compréhension.

Conclusion

J’espère que ce guide vous a permis de bien comprendre le principe des listes en compréhension en Python.

Pour récapituler :

  • Vous pouvez utiliser la syntaxe [<action> for <element> in <liste>] pour créer une liste en compréhension.
  • Vous pouvez également intégrer des conditions en utilisant la syntaxe [<action> for <element> in <liste> if <condition>] avec l’instruction conditionnelle if.

De nombreux exemples pratiques ont été présentés pour illustrer ces concepts. N’hésitez pas à mettre en pratique ce que vous avez appris en réécrivant certaines de vos boucles Python existantes à l’aide des listes en compréhension. Bon codage ! À bientôt pour un nouveau tutoriel. 😄

Vous pouvez maintenant explorer la conversion d’une liste en dictionnaire ou l’apprentissage de la manipulation de fichiers en Python.