💻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

Règle

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).

Méthode

Pour repérer un élément :

  1. Compte les positions à partir de 0, de gauche à droite.
  2. L[i] désigne l'élément de position i.
  3. Le dernier élément est L[len(L) - 1], ou plus simplement L[-1].
  4. Un indice trop grand (≥ len(L)) provoque une erreur IndexError.
Exemple
jours = ["lun", "mar", "mer"]
print(jours[0])    # lun
print(jours[-1])   # mer
print(len(jours))  # 3
Astuce

Le 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)

Règle

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 aa et bb sont deux indices valides avec aba \le b, pourquoi la tranche L[a:b] contient-elle exactement bab - a éléments ? Parce qu'elle prend les indices a,a+1,,b1a, a+1, \dots, b-1 (la fin est exclue) : ce sont les entiers de aa à b1b-1, et il y en a (b1)a+1=ba(b-1) - a + 1 = b - a. C'est le même décompte que les barreaux d'une échelle : du barreau aa au barreau bb, il y a bab - a intervalles, donc bab - a pas. Vérifie avec L[1:4] : les indices retenus sont 1,2,31, 2, 3, soit 41=34 - 1 = 3 é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 ba+1b - a + 1.

Méthode

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.

Exemple
mot = ["P", "y", "t", "h", "o", "n"]
print(mot[0:3])   # ['P', 'y', 't']
print(mot[-2:])   # ['o', 'n']
Astuce

« fin exclue » : L[1:4] ne contient pas L[4].

Parcourir et modifier une liste

Règle

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.

Méthode

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]
Exemple
L = [3, 1, 4]
L.append(1)
L[0] = 9
print(L)   # [9, 1, 4, 1]
Astuce

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

Règle

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]
Méthode

Pour lire [expression for x in source if condition] :

  1. for x in source : on prend chaque élément de la source ;
  2. if condition (facultatif) : on ne garde que ceux qui passent le test ;
  3. expression : on calcule la valeur à mettre dans la nouvelle liste.
Exemple
temps = [12, 18, 25, 9, 30]
chauds = [t for t in temps if t >= 18]
print(chauds)   # [18, 25, 30]
Astuce

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

Règle

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é/valeur

Contrairement à une liste, on n'accède pas par un indice 0, 1, 2… mais par la clé. len(d) donne le nombre de paires.

Méthode

Pour parcourir un dictionnaire d :

  • for cle in d: parcourt les clés ;
  • d.values() donne les valeurs (utile avec sum, max, …) ;
  • for cle in d: puis d[cle] permet d'avoir clé et valeur.

Tester "Léa" in ages répond True si la clé existe.

Exemple
stock = {"pomme": 5, "poire": 2}
total = 0
for fruit in stock:
    total = total + stock[fruit]
print(total)   # 7
Astuce

d[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