Liste en compréhension

Une liste en compréhension (comprehension list) permet de créer une liste à partir d’une itération.

liste = [x for x in range(5)]
print(liste)
# affiche [0, 1, 2, 3, 4]

Un intérêt des listes en compréhension est aussi de permettre de construire une nouvelle liste à partir d’une liste existante :

liste = [1, 2, 3, 4]
nouvelle_liste = [2 * x for x in liste]
print(nouvelle_liste)
# affiche [2, 4, 6, 8]
liste = ["hello", "the", "world"]
nouvelle_liste = [len(x) for x in liste]
print(nouvelle_liste)
# affiche [5, 3, 5]

Il est également possible d’appliquer un filtre lors de la création d’une liste en compréhension afin de ne pas prendre un compte certains éléments de la liste ou de l’itération de départ.

liste = ["hello", "the", "world"]
nouvelle_liste = [x for x in liste if len(x) < 4]
print(nouvelle_liste)
# affiche ['the']

En combinant la liste en compréhension avec des méthodes telles que zip(), il est possible de construire une liste comme le résultat d’opérations sur plusieurs listes :

liste1 = [1, 2, 3, 4]
liste2 = [10, 20, 30, 40]
nouvelle_liste = [x * y for x, y in zip(liste1, liste2)]
print(nouvelle_liste)
# affiche [10, 40, 90, 160]

Il est également possible de combiner deux itérations dans une liste en compréhension. Cela permet de réaliser une itération sur chaque élément de la liste ou de l’itération de départ :

liste = ["hello", "the", "world"]
nouvelle_liste = [c for mot in liste for c in mot]
print(nouvelle_liste)
# affiche ['h', 'e', 'l', 'l', 'o', 't', 'h', 'e', 'w', 'o', 'r', 'l', 'd']

Dans l’exemple ci-dessus, la liste est construite en itérant sur chaque mot de la liste et donc de créer un tableau de l’ensemble des lettres.

Dictionnaire en compréhension

Il est également possible de créer un dictionnaire en compréhension en construisant un couple clé : valeur à partir d’une itération :

liste = ["liste", "avec", "des", "mots"]
dictionnaire = {len(e) : e for e in liste}
print(dictionnaire)
# Affiche {5: 'liste', 4: 'mots', 3: 'des'}

Par exemple, on peut ainsi inverser la clé et la valeur

dictionnaire = {"pomme": 8, "poire": 3, "orange": 7}
nouveau_dict = {v : k for k, v in dictionnaire.items()}
print(nouveau_dict)
# Affiche {8: 'pomme', 3: 'poire', 7: 'orange'}