Les listes en Python
Ce cours a en très grande partie été écrit par Nicolas Revéret
I. Présentation⚓︎
Considérons le tableau ci-dessous présentant les fruits préférés d'un consommateur
Poire | Pomme | Orange | Kiwi | ... |
Ce tableau a plusieurs caractéristiques :
- le fruit préféré du consommateur est dans la première colonne et c'est la « Poire » ;
- les types de valeurs sont uniformes : le tableau présente les fruits préférés du consommateur. Il est impossible d'y trouver la valeur « 3,59 » ;
- ce tableau comporte quatre colonnes, on ne peut pas en rajouter ni en supprimer.
En informatique, un tableau reprend ces caractéristiques :
- un tableau est une structure de données linéaire. Cela signifie qu'il contient différents éléments, rangés dans un certain ordre.
- un tableau est de longueur fixe. Une fois créé, il est impossible d'ajouter ou de supprimer des valeurs.
- les éléments d'un tableau sont tous du même type. Un tableau ne peut donc pas contenir un nombre entier suivi d'une chaîne de caractères.
Le type list
de Python permet de représenter de tels tableaux. Dans toute la suite de ce cours, tous les tableaux seront représentés en Python par des list
.
Remarque
En réalité les list
Python ne sont pas des tableaux au sens plein du terme : ils peuvent contenir des éléments de types variés et leur taille peut évoluer.
Dans tout ce cours, on utilisera tout de même le type list
afin de représenter les tableaux mais l'on fera en sorte de :
- ne jamais modifier la longueur d'une
list
, - de n'y stocker que des éléments du même type.
Pour déclarer une list
on peut délimiter ses éléments avec des crochets :
Cette façon de faire est fastidieuse si le tableau comporte beaucoup de valeurs. Il existe d'autres façons de procéder. Retenons la suivante qui permet de créer un tableau contenant 1 000 fois la valeur None
(qui peut s'apparenter à une valeur vide, on ne fait que créer des cellules afin de les compléter ultérieurement) :
Dans un tableau, chaque élément se trouve à une position précise : il y a le premier élément, le deuxième, le troisième etc. La position d'un élément dans le tableau est donnée par son indice.
Attention
Comme dans beaucoup de langages de programmation, en Python, les indices débutent à 0
!
Ainsi, le premier élément est à l'indice 0
.
Indice | 0 |
1 |
2 |
3 |
4 |
---|---|---|---|---|---|
Valeur | "Poire" |
"Pomme" |
"Orange" |
"Kiwi" |
None |
Connaissant l'indice d'un élément dans un tableau, il est possible de récupérer sa valeur en utilisant la notation tableau[indice]
. Par exemple :
>>> fruits = ['Poire', 'Pomme', 'Orange', 'Kiwi']
>>> fruits[0]
'Poire'
>>> fruits[3]
'Kiwi'
Tableau et mémoire
Dans les langages de programmation tels que C, un tableau est stocké en machine sous forme de cellules contigües.
Connaissant l'adresse \(A_0\) de la première cellule dans la mémoire, la taille \(t\) d'une cellule (fixe car les éléments sont tous de même type) et l'indice \(i\) d'un élément, il est aisé de calculer son adresse mémoire avec \(A_i=A_0+t\times i\).
Le fonctionnement est différent en Python car les éléments d'une list
peuvent être de types différents, ou de taille variable. Ainsi Python ne stocke pas les valeurs dans les cellules mais leurs adresses (qui, elles, sont de taille constante).
Cette instruction permet aussi de modifier une valeur :
>>> fruits = ['Poire', 'Pomme', 'Orange', 'Kiwi']
>>> fruits[1] = 'Banane'
>>> fruits
['Poire', 'Banane', 'Orange', 'Kiwi']
Il est possible de connaître le nombre d'éléments contenus dans un tableau en utilisant la fonction len
. Cette grandeur est la longueur du tableau (length en anglais).
II. Premiers exercices⚓︎
Question
On considère le tableau meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']
.
-
meubles[1]
vaut'Table'
-
meubles[1]
vaut'Commode'
-
meubles[4]
vaut'Buffet'
-
meubles[5]
vaut'Buffet'
- Les indices débutent à
0
. Donc'Table'
est à l'indice0
-
meubles[1]
vaut bien'Commode'
-
meubles[4]
vaut bien'Buffet'
- Le tableau contient 5 éléments. Le dernier éléments est donc à l'indice
4
Question
On considère désormais le tableau pointures = [38, 43, 44, 43, 37, 42, 39, 43, 40]
.
- Ce tableau est mal défini car il contient des valeurs en double
-
pointures[38]
vaut0
-
pointures[3]
est égal àpointures[8]
-
pointures[len(pointures) - 1]
vaut40
- Un tableau peut tout à fait contenir des valeurs en double
- Attention à ne pas confondre indice et valeur. Ici c'est
pointures[0]
qui vaut38
-
pointures[3]
est en réalité égal àpointures[7]
- Comme on a
len(pointures)
qui vaut9
, le dernier élément est bien à l'indice9 - 1
c'est à dire8
Question
Compléter le script ci-dessous :
Solution
# Saisir l'indice permettant d'afficher 'Armoire'
print(meubles[2])
# Saisir l'instruction permettant d'afficher 'Buffet'
print(meubles[4])
# Ou :
print(meubles[len(meubles) - 1])
# Saisir l'instruction permettant d'afficher la longueur du tableau
print(len(meubles))
# Compléter la boucle afin d'afficher tous les meubles du tableau
for indice in range(len(meubles)):
print(meubles[indice], end=", ")
III. Les indices négatifs⚓︎
👉 Il est parfois pratique d'utiliser des indices négatifs :
Les indices négatifs
L'indice -1 correspond au dernier élément de la liste, l'indice -2 l'avant dernier, l'indice -3 l'avant avant dernier, etc...
Indice | -5 |
-4 |
-3 |
-2 |
-1 |
---|---|---|---|---|---|
Valeur | "Poire" |
"Pomme" |
"Orange" |
"Kiwi" |
None |
Testez
Recopiez dans l'éditeur ci-dessous les instructions suivantes, puis tester
# Tests
(insensible à la casse)(Ctrl+I)
IV. QCM⚓︎
Les tableaux - QCM 2
-
Cocher toutes les bonnes réponses
commode
correspond à-
meubles[1]
-
meubles[2]
-
meubles[-4]
-
meubles[- 3]
-
-
Cocher toutes les bonnes réponses
Buffet
correspond à-
meubles[4]
-
meubles[5]
-
meubles[0]
-
meubles[- 1]
-
-
Cocher toutes les bonnes réponses
Table
correspond à-
meubles[0]
-
meubles[1]
-
meubles[- 1]
-
meubles[- 5]
-
-
Cocher toutes les bonnes réponses
Armoire
correspond à-
meubles[2]
-
meubles[3]
-
meubles[- 3]
-
meubles[- 2]
-
-
Cocher toutes les bonnes réponses
len(meubles)
vaut-
4
-
5
-
- 5
-
6
-
# Tests
(insensible à la casse)(Ctrl+I)