top of page
Rechercher

Python - list comprehension

  • Photo du rédacteur: Renaud Jordi
    Renaud Jordi
  • 29 nov. 2024
  • 2 min de lecture
[x**2 for x in range(10) if x % 2]

Ça vous parle ? On appelle ça list-comprehension en Python 🙂


ou liste en compréhension, en français dans le texte.

C’est une syntaxe intégrée à certains langages, mais d’abord en mathématiques, qui permet de créer/filtrer des listes facilement.


En Python, la syntaxe est la suivante :

newlist = [expression for item in iterable if condition == True]

Cela revient à écrire :

newlist = []
for item in iterable*:*
    if condition == True:
        newlist.append(expression)

NB : la condition peut être omise

Pour reprendre l’exemple :

[x**2 for x in range(10) if x % 2] 

Le résultat sortira tous les carrés des nombres impairs de 0 à 9… easy !


Plus fort, on peut imbriquer les for 🙂

newlist = [ expression for x in iterable1 for y in iterable2 if condition == True ]

est équivalent à

newlist = []
for x in iterable1:
    for y in iterable2:
        if expression == True:
            newlist.append(expression) 

Exemple :

[(x, y) for x in [1,2,3] for y in [1,2,3] if x != y]

listera toutes les combinaisons de couple avec des nombres différents.


De plus, le terme ‘expression’ est évalué avant d’être stocké. Ce qui permet d’utiliser des expressions plus complexes, mais qui tiendraient sur une ligne en python.

[abs(x) for x in [3, -1, 7, -4]]
>>> [3, 1, 7, 4]

[x.strip() for x in ["  hello", "  world "]]
>>> ["hello", "world"]

[x if x > 0 else 0 for x in [3, -1, 7, -4]]
>>> [3, 0, 7, 0]

Vous l’aurez compris, c’est un outil redoutable pour simplifier l’écriture 🙂


De la même manière, il existe des dict-compréhension

{ x:x**2 for x in range(10) }

Facile, cela fonctionne exactement pareil… avec des accolades 🙂


Bonus :

La dernière fois, nous avons vu les générateurs. On peut en créer avec la même syntaxe… et des parenthèses

myGen = ( x**2 for x in range(10) )

À vos claviers !



 
 

© LH&TECH, tous droits réservés.

bottom of page