Retour au cours

Supplément - Cours 6

Des casiers aux tableaux

La liste et le tableau 2D, en trois dimensions

720851642903

Une boîte, des casiers

Une variable, c'est une boîte avec une seule chose dedans.

note : int = 72
72note

Une liste, c'est une boîte à casiers numérotés : une seule variable, plusieurs valeurs rangées dans l'ordre.

notes : list[int] = [72, 85, 64, 90]
720851642903

Les numéros commencent à 0

Le numéro gravé sur chaque casier s'appelle l'indice.

  • Le premier casier porte le numéro 0.
  • Le dernier porte le numéro 3, pas 4.
  • 4 casiers, numérotés de 0 à 3 : l'indice compte les casiers avant celui-ci.
720851642903
720851642903
720851642903

Les numéros sur la face avant sont les indices.

Ouvrir un casier : lire une valeur

notes : list[int] = [72, 85, 64, 90] valeur : int = notes[2] print(valeur)

notes[2] se lit « le casier numéro 2 de la boîte notes ».

Résultat :

64
72085164290364

On ouvre le casier, on regarde : la valeur reste dans la boîte.

Remplacer le contenu d'un casier

notes : list[int] = [72, 85, 64, 90] notes[1] = 88

Le = vide le casier 1 et y range 88.

L'ancienne valeur, 85, est perdue : un casier ne contient qu'une chose à la fois.

Avant

720851642903

Après

720881642903

Le casier qui n'existe pas

notes : list[int] = [72, 85, 64, 90] print(notes[4])

Résultat :

IndexError: list index out of range

4 casiers : le dernier indice est 3. Demander le casier 4, c'est ouvrir un casier dessiné en pointillés.

720851642903?4

Le casier 4 n'existe pas dans la boîte.

Compter les casiers : len()

notes : list[int] = [72, 85, 64, 90] taille : int = len(notes) print(taille)

Résultat :

4
720851642903

len compte 4 casiers, mais le dernier porte le numéro 3 : le dernier indice est toujours len(notes) - 1.

Agrandir la boîte

notes.append(77)

append colle un nouveau casier au bout de la boîte.

720851642903774
notes.insert(1, 50)

insert(indice, valeur) ajoute un casier au milieu : ceux qui suivent glissent d'un cran et changent de numéro.

720501852643904

Chaque exemple part de la boîte d'origine [72, 85, 64, 90].

Retirer un casier

notes.pop(2)

pop(indice) retire le casier numéro 2 (il contenait 64) ; les suivants reculent d'un cran.

720851902
notes.remove(85)

remove(valeur) cherche le premier casier qui contient 85 et le retire.

720641902

Le piège : pop reçoit un numéro de casier, remove reçoit un contenu.

Parcourir la boîte, casier par casier

notes : list[int] = [72, 85, 64, 90] for indice in range(len(notes)): print(f"Casier {indice} : {notes[indice]}")

Résultat :

Casier 0 : 72 Casier 1 : 85 Casier 2 : 64 Casier 3 : 90
720851642903

range(len(notes)) fournit les numéros 0, 1, 2, 3 : un tour de boucle par casier.

À vous : quel casier ?

Avant de cliquer, prédisez ce que donne chaque expression :

  • notes[0]
  • notes[3]
  • notes[len(notes) - 1]

Puis cliquez sur un casier pour l'ouvrir.

Cliquez sur un casier
720851642903

La boucle qui prend chaque casier

notes : list[int] = [72, 85, 64, 90] for note in notes: print(note)

Résultat :

72 85 64 90
720851642903

À chaque tour, la variable note reçoit le contenu du casier suivant, de gauche à droite.

for indice in range(len(notes)) donne les numéros ; for note in notes donne directement les contenus. On prend la seconde quand le numéro ne sert à rien.

Compter pendant le parcours

notes : list[int] = [72, 85, 64, 90] compteur : int = 0 for note in notes: if note >= 80: compteur = compteur + 1 print(compteur)

Résultat :

2
720851642903
notenote >= 80compteur
72False0
85True1
64False1
90True2

Le compteur naît avant la boucle (à 0), grandit dans la boucle, et on l'affiche après.

Une chaîne, c'est aussi une boîte

Une chaîne de caractères range une lettre par casier, avec les mêmes indices.

G0A1T2T3A4C5A6
brin : str = "GATTACA" print(brin[0], len(brin))
G 7
brin[0] = "C"
TypeError: 'str' object does not support item assignment

Les casiers d'une chaîne sont scellés : on les lit, on ne les remplace pas.

Le meuble à petites portes

Le tableau à deux dimensions

Un meuble, des tablettes de casiers

Trois stations météo relèvent la température pendant quatre jours. Chaque tablette du meuble est une boîte à casiers : une liste de 4 valeurs.

temperatures : list[list[int]] = [ [12, 14, 9, 11], # station 0 [8, 10, 7, 6], # station 1 [15, 17, 16, 13] # station 2 ]

temperatures[1] donne une tablette entière : [8, 10, 7, 6]

012301212149118107615171613

Une liste de listes : le meuble contient des tablettes, chaque tablette contient des casiers.

Ouvrir une porte : deux numéros

print(temperatures[2][3])
  • [2] : d'abord la tablette 2 (la rangée).
  • [3] : puis la porte 3 de cette tablette (la colonne).

Résultat :

13

Toujours dans cet ordre : tableau[rangée][colonne], et les deux numéros commencent à 0.

012301213

Le même meuble, vu comme un tableau

Ouvrez toutes les portes et regardez le meuble de face : c'est un tableau de données, comme dans un tableur.

Jour 0Jour 1Jour 2Jour 3
Station 01214911
Station 181076
Station 215171613
  • Une rangée = une tablette = une station : le premier indice.
  • Une colonne = une porte = un jour : le deuxième indice.
  • La case orange est temperatures[2][3] : station 2, jour 3, 13 °C.

Parcourir le meuble

for station in range(len(temperatures)): somme : int = 0 for jour in range(len(temperatures[station])): somme = somme + temperatures[station][jour] moyenne : float = somme / len(temperatures[station]) print(f"Station {station} : moyenne {moyenne:.2f} °C")

Résultat :

Station 0 : moyenne 11.50 °C Station 1 : moyenne 7.75 °C Station 2 : moyenne 15.25 °C
012301212149118107615171613
  • La boucle extérieure choisit la tablette.
  • La boucle intérieure ouvre chaque porte de cette tablette.

Défi : quelle porte ?

Quelle expression donne la température de la station 2 au jour 1 ?

temperatures[2][1] → 17 °C

Cliquez ensuite sur les portes : chacune affiche l'expression qui l'ouvre.

Cliquez sur une porte
012301212149118107615171613

À retenir

La liste = une boîte à casiers

Un indice par casier, de 0 à len(liste) - 1.

Lire et remplacer

notes[2] lit le casier, notes[2] = 70 remplace son contenu.

Agrandir et retirer

append, insert, pop (un numéro), remove (un contenu).

La chaîne = des casiers scellés

Une lettre par casier : on lit, on ne remplace pas.

Le tableau 2D = un meuble

tableau[rangée][colonne] : la tablette, puis la porte.

Parcourir

Une boucle par dimension : une pour la boîte, deux imbriquées pour le meuble.

La suite : et si les casiers avaient des noms ?

Dans un pilulier, personne ne cherche « le casier numéro 3 » : on ouvre le casier JEU.

LUNMARMERJEUVENSAMDIM

Et si, au lieu d'un numéro, chaque casier portait un nom choisi par nous ? Python sait faire ça aussi… à suivre.