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".
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}