💻Python : listes et dictionnaires
Cours de mathématiques · Première
Stocker plusieurs valeurs dans une liste, y accéder par indice ou par tranche, la parcourir et la modifier ; construire une liste en compréhension ; associer des clés à des valeurs avec un dictionnaire.
Ce que tu vas savoir faire
- ✓Créer une liste, accéder à un élément par son indice et utiliser les indices négatifs.
- ✓Extraire une tranche (slice) et parcourir une liste avec une boucle for.
- ✓Ajouter des éléments avec append et construire une liste en compréhension.
- ✓Manipuler un dictionnaire : accéder, ajouter et parcourir clés et valeurs.
- ✓Prévoir ce que renvoie un programme qui manipule listes et dictionnaires.
Créer une liste et accéder à ses éléments
Une liste range plusieurs valeurs dans un ordre précis, entre crochets et séparées par des virgules :
notes = [12, 9, 15, 8, 17]Chaque élément a un indice : on commence à compter à 0. notes[0] vaut 12, notes[1] vaut 9, etc. La fonction len(notes) donne le nombre d'éléments (ici 5), donc le dernier indice valide est len(notes) - 1 (ici 4).
Les indices négatifs comptent depuis la fin : notes[-1] est le dernier (17) et notes[-2] l'avant-dernier (8).
Pour repérer un élément :
- Compte les positions à partir de 0, de gauche à droite.
L[i]désigne l'élément de positioni.- Le dernier élément est
L[len(L) - 1], ou plus simplementL[-1]. - Un indice trop grand (≥
len(L)) provoque une erreurIndexError.
jours = ["lun", "mar", "mer"]
print(jours[0]) # lun
print(jours[-1]) # mer
print(len(jours)) # 3Le piège classique : une liste de 5 éléments a ses indices de 0 à 4, pas de 1 à 5. L[len(L)] est toujours une erreur.
Tranches (slices)
Une tranche extrait une sous-liste avec la syntaxe L[debut:fin]. On prend les éléments de l'indice debut (inclus) jusqu'à fin (exclu) :
L = [10, 20, 30, 40, 50]
print(L[1:4]) # [20, 30, 40]
print(L[:3]) # [10, 20, 30] (du début à l'indice 3 exclu)
print(L[2:]) # [30, 40, 50] (de l'indice 2 jusqu'à la fin)Si on omet debut, la tranche part de 0 ; si on omet fin, elle va jusqu'à la fin. Une tranche ne modifie pas la liste de départ : elle en construit une nouvelle.
⭐ Pour les curieux — pourquoi ça marche ? Quand et sont deux indices valides avec , pourquoi la tranche L[a:b] contient-elle exactement éléments ? Parce qu'elle prend les indices (la fin est exclue) : ce sont les entiers de à , et il y en a . C'est le même décompte que les barreaux d'une échelle : du barreau au barreau , il y a intervalles, donc pas. Vérifie avec L[1:4] : les indices retenus sont , soit éléments — et c'est précisément la « fin exclue » qui rend la soustraction aussi propre : si la fin était incluse, il faudrait écrire l'embêtant .
Pour compter les éléments d'une tranche L[a:b] : il y en a b - a (quand a et b sont dans la liste). L[1:4] contient 4 - 1 = 3 éléments.
mot = ["P", "y", "t", "h", "o", "n"]
print(mot[0:3]) # ['P', 'y', 't']
print(mot[-2:]) # ['o', 'n']« fin exclue » : L[1:4] ne contient pas L[4].
Parcourir et modifier une liste
On parcourt une liste avec une boucle for. Deux styles :
notes = [12, 9, 15]
# 1) parcourir les valeurs
for note in notes:
print(note)
# 2) parcourir les indices
for i in range(len(notes)):
print(notes[i])Pour agrandir une liste, on utilise .append(valeur) qui ajoute la valeur à la fin. On peut aussi remplacer un élément par affectation : notes[0] = 20.
Schéma très fréquent : partir d'une liste vide [] et la remplir au fil d'une boucle :
carres = []
for i in range(5):
carres.append(i * i)
# carres vaut [0, 1, 4, 9, 16]L = [3, 1, 4]
L.append(1)
L[0] = 9
print(L) # [9, 1, 4, 1]range(n) produit les entiers 0, 1, …, n-1 : il y en a n, et le dernier est n - 1. Donc range(len(L)) donne exactement les indices valides de L.
Listes en compréhension
Une liste en compréhension construit une liste en une seule ligne, directement à partir d'une autre :
carres = [i * i for i in range(5)] # [0, 1, 4, 9, 16]
doubles = [2 * x for x in [3, 5, 8]] # [6, 10, 16]On peut filtrer avec un if à la fin : on ne garde que les éléments qui vérifient la condition :
pairs = [n for n in range(10) if n % 2 == 0] # [0, 2, 4, 6, 8]Pour lire [expression for x in source if condition] :
for x in source: on prend chaque élément de la source ;if condition(facultatif) : on ne garde que ceux qui passent le test ;expression: on calcule la valeur à mettre dans la nouvelle liste.
temps = [12, 18, 25, 9, 30]
chauds = [t for t in temps if t >= 18]
print(chauds) # [18, 25, 30]Une compréhension remplace souvent une liste vide + un for + un append. Les deux écritures donnent le même résultat : choisis celle que tu lis le mieux.
Dictionnaires : clés et valeurs
Un dictionnaire associe à chaque clé une valeur. On l'écrit entre accolades, sous la forme clé: valeur :
ages = {"Léa": 16, "Tom": 15, "Zoé": 17}
print(ages["Tom"]) # 15 (on accède par la clé, pas par un indice)
ages["Sam"] = 14 # ajoute une nouvelle paire clé/valeurContrairement à une liste, on n'accède pas par un indice 0, 1, 2… mais par la clé. len(d) donne le nombre de paires.
Pour parcourir un dictionnaire d :
for cle in d:parcourt les clés ;d.values()donne les valeurs (utile avecsum,max, …) ;for cle in d:puisd[cle]permet d'avoir clé et valeur.
Tester "Léa" in ages répond True si la clé existe.
stock = {"pomme": 5, "poire": 2}
total = 0
for fruit in stock:
total = total + stock[fruit]
print(total) # 7d[cle] plante (KeyError) si la clé n'existe pas. Pour compter des occurrences, pense à initialiser : if x in d: d[x] += 1 sinon d[x] = 1.
Tu as lu le cours ? Passe à la pratique.
Un coach IA te guide sans jamais donner la réponse, avec des exercices et des quiz sur ce chapitre. Version d'essai gratuite, sans limite de durée.
S'entraîner avec le coach IA — gratuit