Compréhension de liste en Python - avec des exemples

Publié: 2022-02-18

En Python, les compréhensions de liste vous aident à créer de nouvelles listes à partir d'itérables existants, comme des listes, des chaînes et des tuples.

Leur syntaxe succincte vous permet de créer de nouvelles listes en une seule ligne de code. Et ce tutoriel vous apprendra comment vous pouvez le faire.

Au cours des prochaines minutes, vous apprendrez :

  • Comment créer une nouvelle liste en utilisant for boucles for,
  • La syntaxe pour utiliser les compréhensions de liste en Python, et
  • Comment modifier les compréhensions de liste avec l'instruction conditionnelle if .

De plus, vous allez également coder plusieurs exemples qui vous aideront à mieux comprendre les compréhensions de liste.

Plongeons dedans.

Comment créer des listes Python à l'aide de boucles for

Supposons que vous ayez une liste de nombres nums . Et vous aimeriez créer une autre liste qui contient le cube de tous les nombres en nums . Voici comment vous allez le faire 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]

Dans le code ci-dessus, nous avons les étapes suivantes :

  • Initialise une liste vide num_cubes .
  • nums la liste des chiffres.
  • Accédez à chaque nombre num et calculez son cube à l'aide de l'opérateur d'exponentiation : num**3 .
  • Enfin, ajoutez la valeur au cube à la liste num_cubes

Remarque : en Python, l'opérateur d'exponentiation ** est utilisé avec la syntaxe : num**pow —le nombre num est élevé à la puissance pow .

Cependant, vous pouvez le faire plus facilement en utilisant la compréhension de liste en Python. Continuons à apprendre sa syntaxe.

Syntaxe de compréhension de liste Python

La syntaxe générale pour la compréhension de liste est présentée ci-dessous.

 <new_list> = [<expression> for <item> in <iterable>]

Analysons la syntaxe ci-dessus.

  • En Python, les listes sont délimitées par une paire de crochets [] — vous devez donc encadrer la déclaration de compréhension de liste entre [] .
  • <item> dans <iterable> signifie que vous parcourez un itérable. Tout objet Python que vous pouvez parcourir et accéder à des éléments individuels, tels que des listes, des tuples et des chaînes, est itérable.
  • <expression> est la sortie que vous souhaitez calculer pour chaque <item> dans le <iterable> .

Et cela semble simple, n'est-ce pas ?

Essentiellement, vous aimeriez faire quelque chose pour tous les éléments de la liste (ou tout itérable) pour obtenir une nouvelle list .

En utilisant cela, nous pouvons simplifier la syntaxe, comme le montre l'image ci-dessous.

liste-compréhension-syntaxe
Python List Comprehension Syntax (Image de l'auteur)

Maintenant que vous avez appris la syntaxe, il est temps de commencer à coder. Vous pouvez utiliser l'IDE Python en ligne de Geekflare pour suivre ces exemples. Ou vous pouvez les exécuter sur votre machine locale.

Exemples de compréhension de liste Python

Dans la section précédente, vous avez créé une nouvelle liste num_cubes à partir de nums . Commençons par réécrire cela en utilisant la compréhension de liste.

Utilisation de la compréhension de liste avec des nombres

Utilisons maintenant la syntaxe simplifiée comme suit :

  • <do-this> : Ici, vous devez mettre au cube chaque num . Remplacez donc <do-this> par num**3 .
  • <all-items> : La variable de bouclage est num — les numéros individuels de la liste.
  • <this-list> : La liste existante que nous avons est nums .
  • Et [num**3 for num in nums] est l'expression finale.

En mettant tout cela ensemble, nous avons l'extrait de code suivant :

 num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]

Félicitations, vous avez codé votre première compréhension de liste.

Passons à autre chose, travaillons avec des chaînes Python.

Utilisation de la compréhension de liste avec des chaînes

Supposons que vous ayez la liste des authors - vous pouvez réécrire la liste ci-dessous avec vos auteurs préférés.

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

Remarquez comment les noms des auteurs sont en minuscules dans la liste ci-dessus. Nous aimerions maintenant les formater dans la casse du titre et les stocker dans une nouvelle liste appelée author_list .

Remarque : En Python, la méthode de chaîne title() accepte une chaîne comme argument et renvoie une copie de la chaîne formatée dans la casse du titre. C'est-à-dire que la première lettre de chaque mot est en majuscule : First-name Last-name

Voici donc tout ce que vous devez faire :

  • parcourir la liste des authors et pour chaque author de la liste,
  • appelez author.title() pour obtenir une copie de la chaîne avec la casse du titre.

Et le code Python pour cela est illustré ci-dessous :

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

Dans la sortie ci-dessus, observez comment les noms de tous les auteurs ont été formatés dans la casse du titre, ce que nous voulions.

Utilisation de la compréhension de liste avec plusieurs listes

Jusqu'à présent, vous avez appris à utiliser la compréhension de liste pour créer de nouvelles listes à partir d'une liste existante. Voyons maintenant comment créer une nouvelle liste à partir de plusieurs listes.

Par exemple, considérez ce problème : Vous avez deux listes l_arr et b_arr contenant les longueurs et largeurs de 4 rectangles.

Et vous devez créer une nouvelle area de liste qui inclut la zone de ces 4 rectangles. N'oubliez pas, area = length * breadth .

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

Vous aurez besoin d'éléments des deux listes ( l_arr et b_arr ) pour calculer la surface. Et vous pouvez le faire en utilisant la fonction zip() de Python.

Remarque : En Python, la fonction zip() prend un ou plusieurs itérables comme arguments avec la syntaxe zip(*iterables) . Il renvoie ensuite un itérateur de tuples, où le tuple i contient l'élément i de chacun des itérables.

L'image suivante décrit cela en détail. Vous avez 4 valeurs dans l_arr et b_arr , donc la plage d'indices est de 0 à 3. Comme vous pouvez le voir, le tuple 0 contient l_arr[0] et b_arr[0] , le tuple 1 contient l_arr[1] et b_arr[1] , et ainsi de suite.

fonction python-zip
Fonction Python zip() (Image de l'auteur)

Par conséquent, vous pouvez parcourir zip(l_arr,b_arr) comme indiqué ci-dessous :

 area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]

Dans la section suivante, vous apprendrez à utiliser des instructions conditionnelles dans une compréhension de liste.

Compréhension de liste Python avec syntaxe de condition

Commençons par construire sur la syntaxe précédente pour la compréhension de liste.

Voici la syntaxe :

 <new_list> = [<expression> for <item> in <iterable> if <condition>]

Au lieu de calculer l' <expression> pour tous les éléments, vous ne souhaitez le faire que pour les éléments qui satisfont une <condition> spécifique —where, condition := True . Et cela conduit à une syntaxe simplifiée comme indiqué :

liste-compréhension-avec-condition-syntaxe
Compréhension de liste Python avec syntaxe de condition (Image de l'auteur)

Sur ce, passons aux exemples de code.

Compréhension de la liste Python avec des exemples de conditions

#1. Vous recevez la chaîne "J'apprends Python en 2022" . Vous souhaitez obtenir une liste de tous les chiffres de cette chaîne. Alors, comment faites-vous?

En Python, <char>.isdigit() agit sur un caractère <char> et renvoie True si c'est un chiffre (0-9) ; sinon, il renvoie False .

L'extrait de code ci-dessous montre comment vous pouvez collecter la liste de tous les chiffres de la chaîne str1 .

 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 le code ci-dessus :

  • vous parcourez la chaîne str1 ,
  • accéder à chaque char pour vérifier s'il s'agit d'un chiffre à l'aide de la méthode isdigit() , et
  • ajouter char aux nouveaux digits de la liste uniquement s'il s'agit d'un chiffre.

Prenons un autre exemple.

#2. Vous avez une liste de fruits. Et vous aimeriez créer une liste starts_with_b contenant tous les fruits de la liste de fruits commençant par b . Vous pouvez utiliser la méthode startswith() pour écrire la condition.

Le <str>.startswith('char') renvoie True si <str> commence par 'char' ; sinon, il renvoie False .

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

Dans la sortie ci-dessus, nous obtenons 'blueberry' et 'banana' qui sont les deux fruits qui commencent par 'b' dans la liste des fruits , comme nous nous y attendions.

Et cela conclut notre discussion sur la compréhension des listes.

Conclusion

J'espère que ce tutoriel vous a aidé à comprendre les compréhensions de liste en Python.

Résumons :

  • Vous pouvez utiliser [<do this> for <all-items> in <this-list>] pour créer une nouvelle liste en utilisant la compréhension de liste.
  • De plus, vous pouvez utiliser la syntaxe [<do this> for <all-items> in <this-list> if <condition-is-True>] avec l'instruction conditionnelle if .

De plus, vous avez également codé plusieurs exemples. Dans une prochaine étape, vous pouvez essayer de réécrire certaines de vos boucles Python existantes pour la création de listes à l'aide de la compréhension de liste. Bon codage ! Jusqu'au prochain tuto.

Vous pouvez maintenant voir comment convertir une liste en dictionnaire ou apprendre à gérer des fichiers en Python.