Compréhensions Python
Les compréhensions de liste (List Comprehensions) sont un type de syntaxe spécial qui nous permet de créer des listes à partir d’autres listes, et sont incroyablement utiles lorsque l’on travaille avec des nombres et avec un ou deux niveaux de boucles for imbriquées.
Tiré du tutoriel Python 3 tutoriel
Les compréhensions de liste offrent un moyen concis de créer des listes. [...] ou pour créer une sous-séquence de ces éléments qui satisfont une certaine condition.
Lisez Python Comprehensions: A step by step Introduction pour une introduction plus approfondie.
Compréhension de liste (List comprehension)
Voici comment nous créons une nouvelle liste à partir d’une collection existante avec une boucle For:
# Traditional approach: create list using a for loop
names = ['Charles', 'Susan', 'Patrick', 'George']
new_list = []
for n in names:
new_list.append(n)
new_list
['Charles', 'Susan', 'Patrick', 'George']
Et voici comment nous faisons la même chose avec une compréhension de liste :
# List comprehension: concise way to create a new list
# Syntax: [expression for item in iterable]
names = ['Charles', 'Susan', 'Patrick', 'George']
new_list = [n for n in names] # Create list with all names
new_list
['Charles', 'Susan', 'Patrick', 'George']
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
[expression for item in iterable](expression for item in iterable){expression for item in iterable}expression for item in iterableNous pouvons faire de même avec des nombres :
# Nested list comprehension: create tuples from two ranges
# Equivalent to nested for loops
n = [(a, b) for a in range(1, 3) for b in range(1, 3)]
n
[(1, 1), (1, 2), (2, 1), (2, 2)]
Ajout de conditions (Adding conditionals)
Si nous voulons que new_list ne contienne que les noms commençant par C, avec une boucle for, nous le ferions comme ceci :
# Traditional approach: filter with if condition
names = ['Charles', 'Susan', 'Patrick', 'George', 'Carol']
new_list = []
for n in names:
if n.startswith('C'): # Filter names starting with 'C'
new_list.append(n)
print(new_list)
['Charles', 'Carol']
Dans une compréhension de liste, nous ajoutons l’instruction if à la fin :
# List comprehension with condition: filter items
# Syntax: [expression for item in iterable if condition]
new_list = [n for n in names if n.startswith('C')]
print(new_list)
['Charles', 'Carol']
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
if condition go in a list comprehension?for keywordfor clausePour utiliser une instruction if-else dans une compréhension de liste :
# List comprehension with if-else: conditional expression
# Syntax: [expression_if_true if condition else expression_if_false for item in iterable]
nums = [1, 2, 3, 4, 5, 6]
new_list = [num*2 if num % 2 == 0 else num for num in nums] # Double even numbers
print(new_list)
[1, 4, 3, 8, 5, 12]
Compréhensions d'ensemble et de dictionnaire (Set and Dict comprehensions)
Les bases des compréhensions de `list` s'appliquent également aux ensembles (sets) et aux dictionnaires (dictionaries).
Compréhension d’ensemble (Set comprehension)
# Set comprehension: create a set using comprehension syntax
# Syntax: {expression for item in iterable}
b = {"abc", "def"}
{s.upper() for s in b} # Convert all strings to uppercase
{"ABC", "DEF"}
Compréhension de dictionnaire (Dict comprehension)
# Dict comprehension: swap keys and values
# Syntax: {key_expression: value_expression for item in iterable}
c = {'name': 'Pooka', 'age': 5}
{v: k for k, v in c.items()} # Reverse key-value pairs
{'Pooka': 'name', 5: 'age'}
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
[key: value for item in iterable](key: value for item in iterable){key_expression: value_expression for item in iterable}{key, value for item in iterable}Une compréhension de liste peut être générée à partir d’un dictionnaire :
# List comprehension from dictionary: create formatted strings
c = {'name': 'Pooka', 'age': 5}
["{}:{}".format(k.upper(), v) for k, v in c.items()] # Format as "KEY:value"
['NAME:Pooka', 'AGE:5']