Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
17 janvier 2011 1 17 /01 /janvier /2011 13:53

 

 

Depuis la version 2.0 (Octobre 2000), le langage Python supporte les compréhensions de liste. Ce nom cache une syntaxe simple et concise pour créer de nouvelles listes à partir d'autres (en fait, tout objet itérable). C'est une fonctionnalité héritée des langages fonctionnels, ce qui explique que beaucoup de débutants venant de langages impératifs n'est pas le réflexe de les utiliser.

 

Cas d'exemple

 

Nous avons une liste d'entiers (peut importe son origine). Nous souhaitons filtrer cette liste et ne garder que les entiers dont le carré est supérieur à 50. En style impératif, on écrirait :

 nouvelleListe = list()
for entier in ancienneListe:
if entier ** 2 > 50:
nouvelleListe.append(entier)

 

Ces quatre lignes peuvent être simplifiées pour n'en faire qu'une seule au moyen d'une compréhension de liste :

 

 nouvelleListe = [ entier for entier in ancienneListe if entier ** 2 > 50 ]

 

Une compréhension de liste procède par filtrage pour créer une liste à partir d'une autre. La syntaxe est la suivante :

 

[ élémentÀAjouter for élément in séquence {if expression} ]

 

La première chose à remarquer est que l'expression créant une liste, elle est entourée de crochets [ et ], qui délimitent une liste littérale. Une compréhension de liste est divisée en trois parties. La première (ici appelée « élémentÀAjouter ») est simplement une expression qui sera ajoutée à la liste à chaque itération. La deuxième partie est identique à une boucle for classique. Pas de surprises ici. La troisième partie est optionnelle et permet de filtrer certains éléments. Dans le précédent exemple, on n'a retenu que les éléments dont le carré était supérieur à 50.

 

Intérêt des compréhension de listes

 

Outre leur concision, les compréhensions de listes améliorent la lisibilité d'un programme. Un coup d'oeil suffit à en reconnaître une et l'on sait immédiatement ce que l'on va faire. C'est un avantage indéniable pour un langage dynamique. L'exemple itératif demande de lire toute la boucle pour comprendre ce qu'elle fait. En outre, une compréhension de liste est beaucoup plus simple à appréhender que :

 

 nouvelleListe = list(filter(lambda x: x ** 2 > 50, ancienneListe)) 

 

Qui est complètement abscons pour beaucoup de développeurs alors qu'il fait la même chose.

 

Partager cet article

Repost 0
Published by Olivier - dans Programmation
commenter cet article

commentaires

Présentation

Recherche

Liens