Création et manipulation de listes
Création et manipulation de listes
Une liste, c'est une rangée de casiers numérotés à partir de 0 : on la remplit, on lit ou on change un casier grâce à son numéro, et on la parcourt avec une boucle pour calculer une somme, une moyenne ou un maximum.
Objectifs
- Créer une liste en Python : en extension, par ajouts successifs avec
append, en compréhension. - Accéder à un élément par son indice, modifier un élément, connaître la longueur d'une liste avec
len. - Parcourir une liste avec une boucle
for(par les éléments ou par les indices). - Écrire des algorithmes simples sur une liste : somme, moyenne, maximum, comptage, termes d'une suite.
1. Qu'est-ce qu'une liste ?
Notions clés
Une liste est une suite ordonnée d'éléments, écrite entre crochets et séparés par des virgules. Chaque élément a une position appelée indice. Le premier indice est 0, pas 1.
prix = [250, 500, 150, 1000] # prix en F CFA de 4 produits au marché
Si une liste \(L\) contient \(n\) éléments, ses indices vont de \(0\) à \(n-1\). La longueur \(n\) s'obtient avec len(L). On peut aussi compter à partir de la fin avec des indices négatifs : L[-1] est le dernier élément.
Accéder à un élément, le modifier
prix = [250, 500, 150, 1000]
print(prix[0]) # affiche 250
print(prix[-1]) # affiche 1000
prix[1] = 450 # le casier 1 contient maintenant 450
print(prix) # [250, 450, 150, 1000]
print(len(prix)) # 4
Avec prix = [250, 500, 150, 1000], que vaut prix[2] ?
2. Créer une liste
a) En extension
On écrit tous les éléments : notes = [12, 15, 9, 14]. Une liste vide s'écrit [].
b) Par ajouts successifs avec append
On part d'une liste vide et on ajoute les éléments un par un, à la fin, avec L.append(x). C'est très utile dans une boucle.
carres = []
for k in range(5): # k prend les valeurs 0, 1, 2, 3, 4
carres.append(k**2)
print(carres) # [0, 1, 4, 9, 16]
c) En compréhension
On décrit la règle de construction en une seule ligne, comme en mathématiques où l'on écrit \(\{k^2 \mid k \in \{0,1,2,3,4\}\}\) :
carres = [k**2 for k in range(5)] # [0, 1, 4, 9, 16]
pairs = [k for k in range(20) if k % 2 == 0] # [0, 2, 4, ..., 18]
Exemple résolu : une liste de prix
Un commerçant de Lomé vend un sac de riz 1 500 F CFA. Construire la liste des prix de 1, 2, …, 6 sacs.
Voir la solution
Le prix de \(k\) sacs est \(1500k\), pour \(k\) allant de 1 à 6, donc range(1, 7) :
prix_sacs = [1500*k for k in range(1, 7)]
# [1500, 3000, 4500, 6000, 7500, 9000]
Cette liste a 6 éléments : prix_sacs[0] vaut 1500 (1 sac) et prix_sacs[5] vaut 9000 (6 sacs).
Que contient la liste [3*k for k in range(1, 5)] ?
On exécute L = [3, 8, 5] puis L.append(10). Que vaut len(L) ?
3. Parcourir une liste
Deux façons de parcourir une liste L :
for x in L: # x prend successivement chaque valeur de L
print(x)
for i in range(len(L)): # i prend chaque indice : 0, 1, ..., len(L)-1
print(i, L[i])
On utilise le parcours par indices quand on a besoin de la position (par exemple pour modifier L[i] ou pour savoir où se trouve le maximum).
L'algorithme de la somme (accumulateur)
flowchart LR
A[total vaut 0] --> B[Prendre l element suivant]
B --> C[Ajouter l element a total]
C --> D{Encore des elements}
D -- oui --> B
D -- non --> E[Afficher total]
def somme(L):
total = 0
for x in L:
total = total + x
return total
def moyenne(L):
return somme(L) / len(L)
Exemple résolu : les notes d'Awa
Awa a obtenu les notes notes = [12, 15, 9, 14]. Calcule à la main ce que renvoie moyenne(notes).
total = 0.L'algorithme du maximum
def maximum(L):
m = L[0] # on suppose que le premier est le plus grand
for x in L:
if x > m:
m = x # on a trouvé plus grand : on le garde
return m
Exemple résolu : la facture d'électricité la plus élevée
Les factures mensuelles d'une famille de Ouagadougou sont f = [12000, 8500, 15000, 9000] (en F CFA). Que renvoie maximum(f) ?
Voir la solution
On part de \(m = 12000\). 8500 n'est pas plus grand ; 15000 est plus grand, donc \(m = 15000\) ; 9000 n'est pas plus grand. La fonction renvoie 15000.
Que vaut c après : L = [4, 7, 2, 7, 9] puis c = 0 et, pour x dans L, si x == 7 alors c = c + 1 ?
4. Listes et suites numériques
Une liste permet de stocker les premiers termes d'une suite définie par récurrence, par exemple \(u_0 = 1\) et \(u_{n+1} = 2u_n + 1\).
def termes(n):
u = 1
L = [u]
for k in range(n):
u = 2*u + 1
L.append(u)
return L
Exemple résolu : que renvoie termes(4) ?
L = [1].[1, 3, 7, 15, 31], soit 5 termes, de \(u_0\) à \(u_4\).Une suite explicite se construit directement en compréhension : pour \(v_n = n^2 - 1\), la liste [n**2 - 1 for n in range(6)] vaut [-1, 0, 3, 8, 15, 24].
Combien d'éléments contient la liste renvoyée par termes(10) ?
Erreurs fréquentes
- Commencer à compter à 1 : le premier élément est
L[0]. - Utiliser l'indice
len(L), qui n'existe pas : le dernier estL[len(L)-1]. - Oublier que
range(a, b)s'arrête à \(b-1\). - Écrire
L = L.append(x):appendmodifie directement la liste et ne renvoie rien, on écrit simplementL.append(x). - Placer l'initialisation de l'accumulateur dans la boucle.
Récapitulatif
- Une liste s'écrit entre crochets ; ses indices vont de \(0\) à \(n-1\) où \(n\) =
len(L). - On la crée en extension, par
appenddans une boucle, ou en compréhension. L[i]lit l'élément d'indice \(i\) ;L[i] = xle remplace.- On la parcourt avec
for x in Loufor i in range(len(L))pour calculer somme, moyenne, maximum, nombre d'occurrences, ou ranger les termes d'une suite.
Teste tes connaissances sur ce cours
Crée ton compte gratuitement pour accéder aux quiz associés et suivre ta progression.
