Cours pour débutants : apprendre à programmer avec Python au lycée

Image non disponible


précédentsommairesuivant

VIII. Listes en compréhension

C'est une idée reconnue, mais peu de langages de programmation l'ont adoptée : la possibilité de créer des listes de manière à la fois concise et élégante.

Profitons-en !

La syntaxe est très proche de la manière dont, en maths, on peut décrire certains ensembles : Image non disponible et Image non disponible.

Notons tout d'abord que pour les mathématiciens, un ensemble n'est pas ordonné, alors que pour Python, une liste est ordonnée et peut contenir plusieurs fois le même élément.

VIII-A. Au plus simple : copie de la liste

Dans sa version la plus simple, la syntaxe est [x for x in ma_liste], où x est une variable muette et ma_liste est la liste à parcourir.

[x for x in ma_liste] peut se lire « les x quand x parcourt la liste ma_liste. »

 
Sélectionnez
1.
2.
3.
>>> liste = [1, 2, 3]
>>> [x for x in liste]
[1, 2, 3]

On obtient une copie de la liste, ce qui n'est à vrai dire pas très intéressant. De plus on pouvait le faire encore plus facilement avec liste[:]. Passons à quelque chose de plus sérieux.

VIII-B. Avec filtrage par un test

Nous avons vu au chapitre Tests (instruction if)Tests (instruction if) que l'on pouvait exécuter un bloc d'instructions ou un autre suivant le résultat d'un test, comme un aiguillage.

Ici, si la condition suivant le if est vraie, l'élément correspondant sera inclus dans la liste finale, et sera exclu sinon. Notez que nous n'avons pas besoin de else.

[x for x in ma_liste if condition_sur_x] peut se lire « la liste des x quand x parcourt la liste ma_liste, mais seulement les x pour lesquels la condition est vraie. »

 
Sélectionnez
1.
2.
3.
>>> liste = [1, 2, 3]
>>> [x for x in liste if x > 1]
[2, 3]

Les tests peuvent aussi être donnés sous la forme de FonctionsFonctions. En effet, si test est une fonction qui retourne un booléen (voir Compléments sur les booléensCompléments sur les booléens), alors on peut l'utiliser pour filtrer avec la syntaxe [x for x in ma_liste if test(x)].

[x for x in ma_liste if test(x)] peut se lire « la liste des x quand x parcourt la liste ma_liste, tels que test(x) est vrai. »

 
Sélectionnez
1.
2.
3.
4.
5.
>>> def pair(nbre):
...     return nbre % 2 == 0
...
>>> [x for x in range(0, 10) if pair(x)]
[0, 2, 4, 6, 8]

VIII-C. Avec application d'une fonction

Une fois qu'une fonction est définie (numérique ou non, voir FonctionsFonctions), elle peut être appliquée aux nombres de la liste de départ, les images constitueront la liste d'arrivée.

[f(x) for x in ma_liste] peut se lire « la liste des f(x) quand x parcourt la liste ma_liste. »

On obtient le même résultat en mettant directement une expression en x à la place de f(x).

[2*x for x in ma_liste] peut se lire « la liste des doubles de x quand x parcourt la liste ma_liste. ».

 
Sélectionnez
>>> [2*x for x in range(0, 10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

VIII-D. Filtrage et application d'une fonction

Les deux derniers paragraphes peuvent se combiner. [f(x) for x in ma_liste if test(x)] peut se lire « la liste des f(x) quand x parcourt la liste ma_liste, tels que test(x) est vrai. »


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+