On a jusqu’à présent écrit des programmes utilisant des types int
, float
ou booléan
. Une boîte d’un tel type
contient une valeur formée d’un unique nombre (encodé sur un ou plusieurs bits).
Dans de nombreuses situations on a besoin d’utiliser des valeurs qui, comme les chaînes de caractères, les sons ou les images sont formés de plusieurs nombres. Ces valeurs sont dites de type composite.
Les valeurs de typestr
en sont un premier exemple. Il existe également le type list
que nous allons décrire dans ce qui suit.
Si l’on veut utiliser une boîte qui contient dix nombres entiers, par exemple les dix premières décimales du nombre π, on utilisera dans le
programme une variable t
de type list
.
Pour ajouter une telle boîte à l’état d’exécution du programme, on utilise une nouvelle construction : l’allocation.
La boîte associée à la liste t
commence par être vide puis elle se remplit d’autant de valeurs qui lui est allouée par le programme,
chaque valeur occupant une nouvelle « sous-boîte ».
L’instruction t = []
créé une liste vide.
L’instruction t = [0 for i in range(10)]
crée 10 « sous-boîtes » de la boîte t
toutes associées à la valeur 0
.

Avec cette notion d’allocation d’une liste apparaissent donc les nouvelles notions de référence d’une boîte. Ainsi ces deux constructions (allocation et référence) permettent l’affectation d’une valeur à une boîte mais aussi l’accès à une boîte.
Pour une liste L
de n éléments, l’instruction L[p] = expression
où p
est une expression dont la
valeur est comprise entre 0 et n – 1 permet de remplacer l’élément d’indice p
de la liste L
par la valeur de
expression.
Par exemple si nous voulons remplacer la valeur de l’élément d’indice 3 de la liste t
par la valeur 4
, nous allons saisir
l’instruction suivante :
Attention : les éléments sont numérotés de 0 à n – 1. Ainsi l’élément numéro 3 est en fait en 4ème position dans la liste.
Comme pour les suites numériques sont le 1er terme est u0, il y a un décalage de 1 entre le rang et l’indice.
On peut aussi saisir d’instruction :
On affecte à l’élément d’indice 1 (le 2ème) la valeur 6 (3 + 3).
Remarque : une chaîne de caractères intègre également la notion de référence. Ses éléments sont donc atteignables mais pas mutables. Ainsi le script suivant génère une erreur :
chaine = "bonjour"
print(chaine[0]) #La lettre "b" s'afficher
chaine[0] = "p" #Erreur : l'élément n'est pas mutable
Exercice 1
- Écrire une liste contenant les 20 premiers entiers naturels non nuls.
- Écrire une liste contenant les cubes des nombres suivants préalablement inscrits dans la liste
L
:L = [3, 4, 8, 10, 12, 16]
.
- Une piste ?
- Solution ?
for
.
1°/
entiers = [k for k in range(1,21)]
print(entiers)
2°/
L = [3, 4, 8, 10, 12, 16]
print(L)
cubes = [k**3 for k in L]
print(cubes)
Exercice 2
Construire un répertoire associant cinq numéros de téléphone à cinq noms.
Pour cela, créer deux listes vides de chaînes de caractères et remplir les deux listes en affectant une valeur (chaîne de caractères) à chacun des éléments de la liste.
Créer ensuite un script permettant à un utilisateur de rechercher le numéro de téléphone associé à un nom qu’il aura saisi.
- Une piste ?
- Solution ?
nom
et tel
et les remplir élément par élement.
nom = ["" for i in range(5)]
tel = ["" for j in range(5)]
nom[0] = "Alice"
tel[0] = "0606060606"
nom[1] = "Paul"
tel[1] = "0606060707"
nom[2] = "Bérangère"
tel[2] = "0606060809"
nom[3] = "Arthur"
tel[3] = "0605060406"
nom[4] = "Marine"
tel[4] = "0601106060"
s = input("Saisir le nom de la personne dont vous recherchez le numéro de téléphone : ")
k = 0
while k < 5 and nom[k] != s:
k += 1
if k < 5: #Structure conditionnelle permettant de débugger un nom inconnu
print(tel[k])
else:
print("Inconnu")