Les compréhensions de liste vous fournissent un moyen d'écrire pour
des boucles plus concises. Ils peuvent être utiles lorsque vous souhaitez créer de nouvelles listes à partir de listes existantes ou itérables. Par exemple, vous pouvez utiliser une compréhension de liste pour créer une liste de carrés à partir d'une liste de nombres. De même, vous pouvez également utiliser certaines conditions sur une liste de nombres afin que la nouvelle liste que vous créez soit un sous-ensemble de la liste d'origine..
N'oubliez pas que vous ne pouvez pas écrire tous les pour
boucle comme une compréhension de la liste. Une dernière chose: le nom "compréhension des listes" peut être un peu déroutant, car il semble suggérer que les compréhensions ne sont conçues que pour travailler avec des listes. En réalité, le mot "liste" dans les compréhensions de liste est utilisé pour indiquer que vous pouvez faire une boucle sur tout ce qui est itérable dans Python et que le produit final serait une liste..
Les compréhensions de liste de base qui n'utilisent aucune condition ont la forme suivante:
[pour dans ]
Commençons par écrire un très basique pour
boucle pour lister les 15 premiers multiples de 5. Tout d’abord, vous devez créer une liste vide. Ensuite, vous devez parcourir une plage de nombres et les multiplier par 5. La nouvelle séquence de nombres que vous obtiendrez sera composée de multiples de 5..
multiples = [] pour n dans la plage (1,16): multiples.append (n * 5) empreinte (multiples) # [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75]
Ce qui précède pour
boucle a essentiellement la structure suivante:
pourdans :
Si vous le comparez au formulaire de compréhension de liste que vous avez lu précédemment, vous pouvez voir que
est n
,
est gamme (1,16)
, et
est n * 5
. En mettant ces valeurs dans la compréhension de la liste, nous obtiendrons le résultat suivant:
multiples = [n * 5 pour n dans la plage (1,15)] multiples # [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70]
De même, vous pouvez également obtenir une liste avec le cube de nombres donnés comme ceci:
cubes = [n ** 3 pour n dans la plage (1,16)] empreinte (cubes) # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744 , 3375]
Vous pouvez également utiliser un si
condition pour filtrer certaines valeurs de la liste finale. Dans ce cas, la compréhension de la liste prend la forme suivante:
[pour dans si ]
Un exemple de base de ce type de compréhension serait d'obtenir tous les nombres pairs dans une plage donnée. UNE pour
boucle pour faire cette tâche ressemblera à ceci:
evens = [] pour n dans la plage (1,21): si n% 2 == 0: evens.append (n) print (evens) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
La même chose pourrait également être accomplie en utilisant la compréhension de liste suivante:
evens = [n pour n dans la plage (1,21) si n% 2 == 0] print (evens) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Un exemple plus complexe d'utilisation de la compréhension de liste serait d'ajouter … sinon…
expressions conditionnelles à l'intérieur.
Dans ce cas, l’ordre dans lequel vous présentez les énoncés à l’intérieur de la liste de compréhension sera différent de celui habituel. si
conditions. Quand vous avez seulement un si
condition, la condition va à la fin de la compréhension. Cependant, dans le cas d'un … sinon…
expression, les positions du pour
boucle et l'expression conditionnelle sont interchangés. La nouvelle commande est:
[si autre pour dans ]
Commençons par écrire le verbose … sinon…
expression conditionnelle pour obtenir des carrés de nombres pairs et des cubes de nombres impairs dans une plage donnée.
carrés_cubes = [] pour n dans la plage (1,16): si n% 2 == 0: carrés_cubes.append (n ** 2) sinon: carrés_cubes.append (n ** 3) print (carrés_cubes) # [1, 4, 27, 16, 125, 36, 343, 64, 729, 100, 1331, 144, 2197, 196, 3375]
L'expression conditionnelle ci-dessus a la structure suivante:
pourdans : si : autre:
Mettre les valeurs correspondantes aux bons endroits vous donnera la compréhension de la liste suivante:
squares_cubes = [n ** 2 si n% 2 == 0 sinon n ** 3 pour n dans la plage (1,16)] print (carrés_cubes) # [1, 4, 27, 16, 125, 36, 343, 64 , 729, 100, 1331, 144, 2197, 196, 3375]
Vous pouvez également utiliser des boucles imbriquées dans une liste de compréhension. Il n'y a pas de limite au nombre de pour
boucles que vous pouvez mettre dans une liste de compréhension. Cependant, vous devez garder à l'esprit que l'ordre des boucles doit être identique dans le code original et dans la compréhension de la liste. Vous pouvez également ajouter une option si
état après chaque pour
boucle. Une liste de compréhension avec imbriqué pour
Les boucles auront la structure suivante:
[pour dans (facultatif si ) pour dans (facultatif si ) pour dans (facultatif si )… etc… ]
Les exemples suivants devraient tout clarifier. Il y a deux boucles imbriquées, et les multiplier ensemble nous donne des tables de multiplication.
multiplications = [] pour i dans la plage (1, 4): pour n dans la plage (1, 11): multiplications.append (i * n) empreinte (multiplications) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
Ces imbriqués pour
Les boucles peuvent être réécrites comme suit:
pourdans : pour dans :
Une fois que vous avez écrit la boucle dans ce formulaire, la convertir en liste est facile à comprendre:
multiplications = [i * n pour i dans la plage (1,4) pour n dans la plage (1,11)] empreinte (multiplications) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 , 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
Vous pouvez également utiliser une compréhension de liste écrite similaire pour aplatir une liste de listes. L'extérieur pour
la boucle parcourt des listes individuelles et les stocke dans la variable rangée
. L'intérieur pour
la boucle parcourera alors tous les éléments du courant rangée
. Lors de la première itération, la variable rangée
a la valeur [1, 2, 3, 4]
. La deuxième boucle parcourt cette liste ou rangée
et ajoute toutes ces valeurs à la liste finale.
matrice = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],] aplatir = [n pour la ligne dans la matrice pour n dans la ligne] imprimer (aplatir ) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Les interprétations de liste imbriquée peuvent sembler similaires aux interprétations de liste avec des boucles imbriquées, mais elles sont très différentes. Dans le premier cas, vous avez eu affaire à des boucles dans des boucles. Dans ce cas, vous aurez affaire à une compréhension de liste dans une compréhension de liste. Un bon exemple d'utilisation de la compréhension de liste imbriquée serait de créer une transposition de la matrice pour la section précédente..
Sans expression de compréhension de liste, vous devrez utiliser deux pour
boucles pour créer la transposition.
matrice = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],] transpose = [] pour i dans la plage (4): temp = [] pour ligne dans la matrice: temp.append (ligne [i]) transpose.append (temp) print (transpose) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]
La boucle externe parcourt quatre fois la matrice car elle comporte quatre colonnes. La boucle interne parcourt les éléments de la ligne actuelle, un index à la fois, et les ajoute à une liste temporaire appelée temp
. le temp
La liste est ensuite ajoutée en tant que ligne à la matrice transposée. Dans le cas des listes imbriquées, la boucle la plus externe vient à la fin et la boucle la plus à l'intérieur vient au début.
Voici le code ci-dessus sous la forme d'une liste de compréhension:
matrice = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],] transposer = [[ligne [n] pour ligne dans la matrice] pour n dans plage (4)] print (transpose) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
Une autre façon de voir les choses est de considérer la structure de la compréhension de liste qui remplace la base pour
boucles que vous avez apprises au début de l'article.
[pour dans ]
Si vous le comparez avec la compréhension de la liste imbriquée ci-dessus, vous verrez que
dans ce cas est en fait une autre compréhension de la liste: [rangée [n] pour rangée dans la matrice]
. Cette compréhension de liste imbriquée elle-même se présente sous la forme d’une pour
boucle.
J'espère que ce tutoriel vous a aidé à comprendre ce que sont les listes de compréhension et comment les utiliser à la place de bases pour
boucles pour écrire du code concis et légèrement plus rapide lors de la création de listes.
Une autre chose à garder à l’esprit est la lisibilité de votre code. La création de compréhensions de liste pour les boucles imbriquées rendra probablement le code moins lisible. Dans de tels cas, vous pouvez décomposer la compréhension de la liste en plusieurs lignes pour améliorer la lisibilité..
De plus, n'hésitez pas à voir ce que nous avons à vendre et à étudier sur le marché Envato, et n'hésitez pas à poser des questions et à fournir vos précieux commentaires en utilisant le flux ci-dessous.