Vous avez peut-être entendu parler de la compréhension de liste de Python. C'est peut-être même quelque chose que vous avez utilisé sans vraiment comprendre. Il est maintenant temps d'apprendre, car nous couvrons tout ce que vous devez savoir sur la compréhension des listes en Python.
Avant de commencer, il vaut la peine de vous rafraîchir sur le fonctionnement des tableaux et des listes en Python et sur l'utilisation des dictionnaires Python.
La compréhension de la liste semble complexe, mais ce n'est vraiment pas le cas. En Python, c'est simplement un moyen rapide de filtrer ou d'affiner une liste en fonction de certains critères.
Cela vous évite d'avoir à écrire plusieurs lignes de code (surtout si vous êtes déjà dans une boucle) et cela maintient la lisibilité de votre code.
Soyez prudent, cependant, car la compréhension de la liste n'est pas toujours la réponse. Il est facile de se laisser emporter et d'écrire des compréhensions complexes difficiles à lire. Parfois, écrire plus de code est préférable, surtout si cela améliore la lisibilité. Tenez-vous en à des tâches simples et confiez le code à une seule responsabilité.
Remarque : Ces exemples utilisent tous Python 3.6. Si vous n'êtes pas sûr des différences entre Python 3 et Python 2, assurez-vous de lire notre FAQ Python, où nous couvrons cette question et plus encore.
Considérez ce morceau de code qui copie un tableau et transforme chaque lettre de ce tableau en majuscule. Pour ce faire, il parcourt chaque élément du tableau :
lettres =['a', 'b', 'c', 'd']
imprimer (lettres)
lettres_majuscules =[]
pour lettre en lettres:
result =letter.upper()
lettres_majuscules.append(résultat)
print(upper_letters)
Maintenant, voici la même logique exacte, sauf qu'elle est faite en une seule ligne de code en utilisant une compréhension de base de la liste Python :
lettres =['a', 'b', 'c', 'd']
imprimer (lettres)
upper_letters =[x.upper() pour x en lettres]
imprimer (lettres_majuscules)
Comme vous pouvez le voir, le résultat est exactement le même, mais le processus implique beaucoup plus de code sans compréhension de liste.
Décomposons cet exemple simple.
Cet exemple crée une liste appelée lettres . Cela stocke les lettres minuscules "a", "b", "c" et "d". Supposons que vous souhaitiez que tous ces éléments de liste soient en majuscules ? Eh bien, sans compréhension de la liste, vous devez créer une nouvelle liste pour stocker le résultat (appelée upper_letters ), boucle sur chaque élément des lettres liste, convertissez chaque lettre (et stockez-la dans résultat ---facultatif mais bonne pratique), puis ajoutez la lettre majuscule à la nouvelle liste. Quel travail !
La compréhension de liste ici est presque exactement équivalente à l'alternative de boucle. Il dit effectivement "pour chaque lettre de la liste des lettres, convertissez-les en majuscules et renvoyez le résultat sous la forme d'une nouvelle liste."
La compréhension de liste ne peut fonctionner que sur des listes et doit renvoyer une nouvelle liste. Allons plus loin.
Il y a trois parties dans la compréhension d'une liste (nous couvrirons la troisième partie ci-dessous). Les compréhensions de liste doivent commencer et se terminer par des crochets ([ et ] ). C'est ainsi qu'il a été conçu et permet à Python de savoir que vous allez travailler avec une liste.
À l'intérieur des crochets, vous devez commencer par le résultat. C'est ce que vous voulez faire avec chaque élément de la liste.
Dans l'exemple ci-dessus, le code suivant convertit chaque élément (référencé par le nom de variable x ) en majuscules en utilisant upper() méthode, qui fait partie de la bibliothèque principale de Python :
[x.upper() # ne s'exécutera pas, seulement la moitié de la compréhension à ce stade
Ensuite, vous devez indiquer à Python sur quelle liste travailler et affecter chaque élément individuel à une variable. C'est exactement identique à la boucle for dans l'exemple long :
pour x en lettres
Chaque fois que la boucle parcourt la liste, la valeur de x changera en quel que soit l'élément actuel. Il commencera par "a", puis "b", et ainsi de suite.
Si vous mettez tout cela ensemble (et que vous l'attribuez à une variable appelée upper_letters ), vous aurez terminé :
upper_letters =[x.upper() pour x en lettres]
Maintenant, lettres majuscules contiendra une liste de lettres majuscules, commençant par "A", puis "B" et ainsi de suite.
Comme nous l'avons mentionné ci-dessus, il y a une troisième partie pour lister la compréhension.
Une fois que vous avez effectué les deux étapes ci-dessus, vous pouvez inclure une condition facultative. C'est comme utiliser un if déclaration pour dire "faites-moi une nouvelle liste, basée sur cette ancienne liste, mais n'incluez que les éléments qui répondent à mes critères".
Voici à quoi cela ressemble :
âges =[1, 34, 5, 7, 3, 57, 356]
imprimer (âges)
old_ages =[x pour x dans les âges si x> 10]
print(old_ages)
Cet exemple utilise une nouvelle liste appelée âges . Les vieillesses La liste est assemblée à l'aide d'une compréhension de liste. Le si condition à la fin signifie que seuls les éléments de la liste qui répondent aux critères sont insérés dans la nouvelle liste. Dans cet exemple, tous les âges supérieurs à dix ans sont autorisés.
La compréhension de la liste est incroyable une fois que vous avez compris, mais elle n'est pas utile dans toutes les circonstances. Vous ne devriez probablement pas l'utiliser lorsque vous avez besoin de plus d'une condition :
old_ages =[x for x in ages if x> 10 and x <100 and x is not None]
Ce code fonctionne, mais il commence à être long et déroutant. De même, rien de plus qu'un simple appel de fonction peut ne pas fonctionner. Dans cet exemple, vous obtiendrez une erreur :
lettres =['a', 'b', 'c', 'd', 2]
imprimer (lettres)
upper_letters =[x.upper() pour x en lettres]
print(upper_letters)
C'est un code parfaitement valide, mais comme vous ne pouvez pas mettre un nombre en majuscule, cela ne fonctionnera pas. C'est un cas où la boucle la plus longue est en fait préférable, car vous serez en mesure de gérer les exceptions :
lettres =['a', 'b', 'c', 'd', 1]
imprimer (lettres)
lettres_majuscules =[]
pour lettre en lettres:
essayer:
result =letter.upper()
lettres_majuscules.append(résultat)
sauf AttributeError :
passer # ne rien faire
print(upper_letters)
Maintenant que vous savez à quel point la compréhension de liste est facile en Python, il n'y a aucune raison de ne pas l'utiliser. N'oubliez pas de rester simple et de considérer la lisibilité avant tout.
Peut-être contrôlerez-vous un Arduino avec Python, ou que diriez-vous d'une caméra de sécurité réseau DIY Python ?