Les listes
Une variable pour plusieurs valeurs
Imagine les notes d'une classe de 60 élèves. Avec ce que tu connais, il faudrait 60 variables : note1, note2, ... note60. Impossible à manier, et impossible de calculer une moyenne sans écrire les 60 noms.
notes = [12, 15, 9, 17]
fruits = ["mangue", "ananas", "papaye"]
vide = []
Une liste peut contenir n'importe quel type : des nombres, des textes, des booléens, et même un mélange (même si c'est rarement une bonne idée). Son type à elle s'appelle list.
Pour taper les crochets sur un clavier AZERTY : AltGr + 5 pour [ et AltGr + ° (la touche à droite du 0) pour ].
Accéder à un élément : l'index
Attention, le premier élément a l'index 0, pas 1 :
fruits = ["mangue", "ananas", "papaye"]
# 0 1 2
fruits[0] # 'mangue'
fruits[1] # 'ananas'
fruits[2] # 'papaye'
Une liste de 3 éléments a donc les index 0, 1, 2. Le dernier index est toujours la longueur moins 1.
Les index négatifs
Python permet de compter depuis la fin avec des index négatifs :
fruits[-1] # 'papaye' : le dernier
fruits[-2] # 'ananas' : l'avant-dernier
C'est très pratique : liste[-1] donne toujours le dernier élément, quelle que soit la longueur.
L'erreur IndexError
fruits[3]
IndexError: list index out of range
« Index hors limites. » La liste n'a pas de position 3 (elle s'arrête à 2). C'est l'erreur classique quand on oublie que l'on commence à 0.
La longueur
len, que tu connais pour le texte, marche aussi pour les listes : len(fruits) vaut 3.
Pratique : Manipule une liste
Crée la liste, puis prévois chaque résultat avant d'appuyer sur Entrée.
Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer
Modifier une liste
Contrairement au texte, une liste peut être modifiée après sa création.
| Écriture | Effet | Après, notes vaut |
|---|---|---|
notes = [12, 15, 9] |
création | [12, 15, 9] |
notes[2] = 11 |
remplace l'élément d'index 2 | [12, 15, 11] |
notes.append(18) |
ajoute à la fin | [12, 15, 11, 18] |
notes.insert(0, 7) |
insère à l'index 0 | [7, 12, 15, 11, 18] |
notes.remove(15) |
retire la première valeur égale à 15 | [7, 12, 11, 18] |
notes.pop() |
retire le dernier élément (et le renvoie) | [7, 12, 11] |
append (« ajouter à la fin ») est de loin la plus utilisée : on part souvent d'une liste vide et on la remplit petit à petit.
panier = []
panier.append("riz")
panier.append("huile")
# panier vaut ["riz", "huile"]
Tester et découper
Est-ce dans la liste ? in
Comme pour le texte, in teste si une valeur est présente. Le résultat est un booléen :
"riz" in panier # True
"sucre" not in panier # True
C'est parfait pour un if : if "riz" in panier:.
Découper une liste : les tranches
notes = [7, 12, 15, 11, 18]
notes[1:3] # [12, 15] : index 1 et 2, pas 3
notes[:2] # [7, 12] : depuis le début
notes[2:] # [15, 11, 18] : jusqu'à la fin
notes[-2:] # [11, 18] : les deux derniers
Pourquoi « fin exclue » ? Justement pour l'argument de Dijkstra : notes[0:3] contient exactement 3 - 0 = 3 éléments, et notes[:2] + notes[2:] redonne la liste entière, sans trou ni doublon.
Les tranches marchent aussi sur le texte : "Douala"[:3] vaut 'Dou'.
Exercice : Premier et dernier
Range dans premier le premier élément de classement, et dans dernier le dernier. Utilise des index, et pour le dernier un index négatif, pour que ton code marche quelle que soit la longueur de la liste.
Voir une solution
classement = ["Awa", "Boris", "Chantal", "Didier"] # donné
premier = classement[0]
dernier = classement[-1]Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Remplir un panier
Pars de la liste vide panier. Ajoute-lui, dans cet ordre, "riz", "huile" et "savon" avec append. Puis remplace "huile" par "sel" en utilisant son index. Enfin, affiche le panier et sa longueur.
Voir une solution
panier = []
panier.append("riz")
panier.append("huile")
panier.append("savon")
panier[1] = "sel"
print(panier)
print(len(panier))Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Est-ce en stock ?
Une boutique a une liste de produits en stock. Si demande est dans le stock, affiche Disponible, sinon affiche Rupture de stock.
Voir une solution
stock = ["riz", "huile", "savon", "sucre"] # donné
demande = "savon" # donné
if demande in stock:
print("Disponible")
else:
print("Rupture de stock")Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Le podium
resultats contient les coureurs dans l'ordre d'arrivée. Range dans podium les trois premiers avec une tranche, et dans autres tous ceux qui suivent.
Voir une solution
resultats = ["Kiprop", "Mbarga", "Bekele", "Ngono", "Diallo"] # donné
podium = resultats[:3]
autres = resultats[3:]Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Teste-toi
Avec l = [10, 20, 30, 40, 50], que vaut l[1:4] ?
[10, 20, 30, 40][20, 30, 40](bonne réponse)[20, 30, 40, 50][10, 20, 30]
Index 1, 2 et 3 : 20, 30, 40. La fin (index 4) est exclue.
Après panier = ["riz"] puis panier = panier.append("huile"), que vaut panier ?
["riz", "huile"]["huile"]None(bonne réponse)- Une erreur
append modifie la liste et ne renvoie rien (None). En rangeant ce « rien » dans panier, on a perdu la liste. Il fallait écrire simplement panier.append("huile").