Résumé — Python : les listes
En seconde, une variable Python rangeait une valeur. Mais pour stocker les 100 premiers termes d’une suite ou un tableau de valeurs d’une fonction, il faudrait 100 variables… La solution de première : la liste, une seule variable qui contient toute une collection de valeurs, numérotées et modifiables. C’est LA nouveauté Python de l’année — et on se limite à elle, aucun autre type de collection au programme.
Créer une liste, lire ses éléments
Une liste s’écrit en extension : les valeurs entre crochets, séparées par des virgules. Chaque élément a un numéro, son indice — et la numérotation commence à 0.
notes = [12, 15, 9, 18]
print(notes[0]) # affiche 12 (le PREMIER élément a l'indice 0)
print(notes[3]) # affiche 18 (le dernier : indice 3, pas 4)
print(len(notes)) # affiche 4 (le nombre d'éléments)
- Une liste de éléments a des indices de à : le dernier élément est
notes[len(notes) - 1]. - La liste vide s’écrit
[]— c’est le point de départ de beaucoup de programmes.
Modifier une liste : ajouter, remplacer, supprimer
notes.append(14) # ajoute 14 À LA FIN : [12, 15, 9, 18, 14]
notes[2] = 10 # remplace l'élément d'indice 2 : [12, 15, 10, 18, 14]
del notes[0] # supprime l'élément d'indice 0 : [15, 10, 18, 14]
append (« ajouter » en anglais) est l’outil n° 1 : combiné à une boucle, il fabrique une liste par ajouts successifs :
L = []
for n in range(1, 6):
L.append(3 * n)
print(L) # affiche [3, 6, 9, 12, 15]
Créer une liste en compréhension
La compréhension compacte la boucle ci-dessus en une seule ligne, très proche de la notation mathématique des ensembles :
La compréhension, dictionnaire maths ↔ Python
« La liste des n² pour n allant de 0 à 9 ». On peut ajouter une condition, comme en logique : [n for n in range(20) if n % 2 == 0] donne les pairs [0, 2, 4, …, 18] — « les n TELS QUE n est divisible par 2 ».
carres = [n**2 for n in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
pairs = [n for n in range(20) if n % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Parcourir une liste : par éléments ou par indices
Deux façons de visiter tous les éléments. Par éléments — la plus lisible — quand seules les valeurs comptent :
notes = [15, 10, 18, 14]
total = 0
for x in notes: # x prend successivement les valeurs 15, 10, 18, 14
total = total + x
print(total / len(notes)) # affiche 14.25 (la moyenne)
Par indices, quand la position sert aussi (comparer des voisins, modifier la liste…) :
for i in range(len(notes)): # i prend les valeurs 0, 1, 2, 3
print(i, notes[i])
Éléments ou indices ?
Tu n’as besoin que des valeurs (somme, moyenne, maximum, comptage) → for x in L. Tu as besoin de la position (numéro du terme, élément suivant, remplacement) → for i in range(len(L)) puis L[i]. Les deux parcourent toute la liste, dans l’ordre.
Les listes au service des maths de première
Les premiers termes d’une suite définie par récurrence — ici et :
termes = [1]
for n in range(4):
termes.append(2 * termes[n] + 1)
print(termes) # affiche [1, 3, 7, 15, 31]
À chaque tour, le nouveau terme se calcule à partir du précédent, termes[n] — la liste garde toute l’histoire de la suite.
Le tableau de valeurs d’une fonction, en une ligne de compréhension :
abscisses = [x for x in range(-3, 4)] # [-3, -2, -1, 0, 1, 2, 3]
images = [x**2 for x in abscisses] # [9, 4, 1, 0, 1, 4, 9]
Les pièges classiques
Quatre erreurs qui coutent des points
Les indices commencent à 0 : L[1] est le deuxième élément. Une liste de longueur s’arrête à l’indice : L[len(L)] provoque une erreur (« index out of range »). Dans une compréhension, range(10) s’arrête à 9 — le piège de seconde n’a pas disparu. Et ne confonds pas L.append(x) (ajoute à la fin) avec L[i] = x (remplace l’élément d’indice , sans changer la longueur).
Le cours en vidéo
- Python : les listes (1re)