ParcoursOuvrir l'appli

Les compréhensions : des boucles en une ligne

Python, dictionnaires et compréhensions · 40 min

Une boucle, résumée

Tu as écrit des dizaines de fois ce motif : une liste vide, une boucle, un append.

carres = []
for n in range(1, 6):
    carres.append(n * n)
# [1, 4, 9, 16, 25]

Python permet de l'écrire en une seule ligne :

carres = [n * n for n in range(1, 6)]

Lis-la comme une phrase : « la liste des n * n, pour chaque n dans range(1, 6) ». Compare les deux versions : c'est exactement la même boucle, réorganisée.

[  n * n      for n in range(1, 6)  ]
   ce qu'on      la boucle, comme
   ajoute        d'habitude

Avec un filtre

On peut ajouter une condition à la fin, pour ne garder que certains éléments :

admis = [note for note in notes if note >= 10]

« La liste des note, pour chaque note dans notes, si note >= 10 ». C'est l'équivalent exact de :

admis = []
for note in notes:
    if note >= 10:
        admis.append(note)

Quatre lignes en une.

Pratique : Essaie les compréhensions

Prévois chaque résultat avant d'appuyer sur Entrée.

Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer

Les compréhensions de dictionnaire, et la règle de lisibilité

Le même principe marche pour construire un dictionnaire, avec des accolades et une paire cle: valeur :

prix_ht = {"riz": 1000, "savon": 400}
prix_ttc = {produit: round(p * 1.1925) for produit, p in prix_ht.items()}
# {'riz': 1192, 'savon': 477}

Exercice : Les carrés

Range dans carres la liste des carrés des entiers de 1 à n inclus, avec une compréhension.

Voir une solution
n = 5   # donné

carres = [i * i for i in range(1, n + 1)]

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Filtrer les admis

Range dans admis les notes d'au moins 10, avec une compréhension et un if.

Voir une solution
notes = [12, 8, 15, 9.5, 10, 17]   # donné

admis = [note for note in notes if note >= 10]

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Nettoyer une liste de noms

Une liste de noms a été saisie n'importe comment. Range dans propres les noms sans espaces autour et avec une majuscule au début de chaque mot, en retirant les noms vides.

Voir une solution
saisies = ["  awa ", "BORIS", "", "jean-paul essomba  ", "   "]   # donné

propres = [nom.strip().title() for nom in saisies if nom.strip() != ""]

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Les prix en euros

Construis le dictionnaire prix_euros qui associe à chaque produit son prix en euros, arrondi à 2 chiffres, avec une compréhension de dictionnaire. Rappel : 1 euro = 655,957 FCFA.

Voir une solution
prix_fcfa = {"riz": 1200, "savon": 500, "huile": 1500}   # donné
TAUX_EURO = 655.957

prix_euros = {produit: round(p / TAUX_EURO, 2) for produit, p in prix_fcfa.items()}

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Récap : le tableau des clients majeurs

À partir de clients, construis avec une seule compréhension la liste majeurs des noms en majuscules des clients d'au moins 18 ans.

Voir une solution
clients = [{"nom": "Awa", "age": 19}, {"nom": "Boris", "age": 16}, {"nom": "Chantal", "age": 23}]   # donné

majeurs = [c["nom"].upper() for c in clients if c["age"] >= 18]

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice