Algo. et prog. 2 en
Logo de Python
Arnaud COUTURIER - Python 3.10

Compréhension de listes

Listes

Une compréhension de liste est une facilité d'écriture qui permet de créer des listes de façon concise, donc en écrivant très peu de code. Typiquement on s'en sert pour créer des listes dont chaque élément est le résultat d'une opération appliquée à chaque élément d'un autre iterable.

Prenons un exemple. On veut créer une liste de nombres entre 0 et 9 élevés au carré. De façon classique, sans compréhension, on ferait:


		carrés = []
		for x in range(10):
			carrés.append(x**2)
		print(carrés)
	

Affichage:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Avec une compréhension de liste, on peut écrire:


		carrés = [x**2 for x in range(10)]
		print(carrés)
	

Affichage:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Notez que cette écriture est plus courte. Un autre bénéfice est que la variable x est "locale" à la compréhension, elle n'existe plus après son exécution, ce qui est une bonne chose, contrairement à la boucle for qui a créé x qui existe encore après la boucle.

Une compréhension est une expression, elle s'évalue donc à une seule valeur, et est d'un certain type, qui dans le cas d'une compréhension de liste sera le type list. On peut lire cette compréhension [x**2 for x in range(10)] de la manière suivante: "une nouvelle liste qui contient x élevé à la puissance 2 pour chaque x dans l'intervalle 0 inclus à 10 exclu".

On peut aussi ne considérer que certains éléments avec un if facultatif et une expression booléenne.


		L = [-4, -2, 0, 2, 4]
		carrés = [x for x in L if x >= 0]
		print(carrés)
	

Affichage:

[0, 2, 4]

On lit cette compréhension [x for x in L if x >= 0] de la manière suivante: "une nouvelle liste qui contient x pour chaque x dans L si x est plus grand ou égal à zéro".

Dictionnaires

Ils supportent aussi l'écriture concise sous forme de compréhension. Par exemple:


		d = {x: x**2 for x in (2, 4, 6)}
		print(d)
	

Affichage:

{2: 4, 4: 16, 6: 36}