Question 1Étant donné nums = [10, 20, 30], que contiendra nums après l'exécution de nums.append([40, 50]) ?
Comment utiliser les listes Python (list)
Apprends à manipuler les listes en Python pour stocker plusieurs valeurs et les transformer avec les méthodes essentielles.
Créer une liste
Avec une liste (list), tu peux regrouper plusieurs valeurs au même endroit. Contrairement à int ou str, où une variable contient une seule valeur, une liste peut aligner autant de valeurs que tu veux côte à côte.
Pour en déclarer une, entoure les valeurs de [ et ], séparées par des virgules.
Comme pour les chaînes, tu accèdes aux éléments par un indice commençant à 0. [0] te donne le premier, et [-1] te donne le dernier.
Une caractéristique clé des listes : tu peux modifier les valeurs après coup.
# Déclaration d'une liste
numbers = [10, 20, 30, 40]
# Liste vide (à remplir plus tard)
empty = []
# Accès
print(numbers[0]) # 10
print(numbers[-1]) # 40
# Écrasement
numbers[1] = 99
print(numbers) # [10, 99, 30, 40]
# Mélanger les types, c'est permis
mixed = [1, "apple", 3.14, True]
print(mixed[1]) # apple
Listes imbriquées (listes dans une liste)
Tu peux aussi placer des listes dans une liste, comme [[1, 2], [3, 4]]. Pour extraire une valeur, tu enchaînes deux indices comme dans data[1][0]. C'est pratique pour des données en forme de tableau, mais une simple liste plate suffit largement au début.
Le slicing
Les listes utilisent la même syntaxe de slice que les chaînes. [début:fin] renvoie une sous-liste, [::pas] parcourt la liste par sauts, et [-n:] récupère les n derniers éléments.
Le résultat d'un slice est une liste.
[:3] prend les 3 premiers (intervalle semi-ouvert, sans inclure la fin), et [-2:] prend les 2 derniers.
Cela fonctionne exactement comme le slicing des chaînes.
nums = [1, 2, 3, 4, 5]
print(nums[:3]) # [1, 2, 3]
print(nums[2:]) # [3, 4, 5]
print(nums[-2:]) # [4, 5]
print(nums[::2]) # [1, 3, 5] (un sur deux)
# La liste d'origine ne change pas (une nouvelle liste est renvoyée)
print(nums) # [1, 2, 3, 4, 5]
Ajouter et supprimer des éléments
Les listes disposent d'une foule de méthodes pour ajouter ou supprimer des éléments. Ces méthodes modifient la liste elle-même. Autrement dit, appeler list.append(...) modifie list sur place.
| Méthode | Rôle |
|---|---|
| append(x) | Ajouter un élément à la fin |
| extend(iterable) | Ajouter tous les éléments d'une autre liste à la fin |
| insert(i, x) | Insérer x à la position i |
| remove(x) | Parcourir depuis la gauche et supprimer la première occurrence de x |
| pop(i) | Supprimer l'élément à la position i et le renvoyer (par défaut le dernier) |
| clear() | Vider entièrement la liste |
append ajoute « un seul élément ».
extend « déplie et ajoute » chaque élément.
Même en passant le même [4, 5], le résultat diffère.
box = [1, 2, 3]
# Ajout
box.append("apple") # ajoute un élément à la fin
print(box) # [1, 2, 3, 'apple']
box.extend(["banana", "grape"]) # déplie et ajoute à la fin
print(box) # [1, 2, 3, 'apple', 'banana', 'grape']
box.insert(1, "NEW") # insère à l'indice 1
print(box) # [1, 'NEW', 2, 3, 'apple', 'banana', 'grape']
# Suppression
box.remove("apple") # supprime la première occurrence par valeur
print(box) # [1, 'NEW', 2, 3, 'banana', 'grape']
v = box.pop(0) # retire l'indice 0 et le renvoie
print(v) # 1
print(box) # ['NEW', 2, 3, 'banana', 'grape']
remove / pop sur un élément absent → erreur
remove(x) lève ValueError si x n'est pas dans la liste, et pop(i) lève IndexError si i est hors limites. Un pattern sûr consiste à vérifier la présence avant avec if x in box: avant de supprimer.
Trier et rechercher (sort / reverse / count / index)
Les listes possèdent aussi des méthodes de tri et de recherche. Le point important ici, c'est qu'il existe deux types de méthodes.
- Les méthodes qui modifient la liste (sort / reverse) → ne capture pas de valeur de retour ; la liste elle-même change
- Les méthodes qui renvoient une valeur (count / index) → utilise la valeur de retour, comme dans print(list.count(...))
sort / reverse : modifient la liste directement. Ne capture pas.
count / index : ne touchent pas à la liste — elles renvoient une valeur. Capture-la et utilise-la.
fruits = ["banana", "lemon", "apple", "grape"]
# (1) Méthodes modifiantes : la liste change juste en les appelant
fruits.sort()
print(fruits) # ['apple', 'banana', 'grape', 'lemon']
fruits.reverse()
print(fruits) # ['lemon', 'grape', 'banana', 'apple']
# (2) Méthodes à retour : capture et utilise la valeur renvoyée
nums = [1, 2, 2, 3, 2, 4]
print(nums.count(2)) # 3 (il y a trois 2)
print(nums.index(3)) # 3 (3 est le 4e élément = indice 3)
Pourquoi print(fruits.sort()) affiche None
Une erreur fréquente : écrire print(fruits.sort()) et voir None s'afficher. sort() ne renvoie pas de valeur — elle trie fruits sur place.
La bonne correction est d'appeler fruits.sort() seul, puis print(fruits) sur la ligne suivante — sépare en deux lignes.
Au passage, les détails sur les valeurs de retour (les valeurs que les méthodes et fonctions renvoient) seront couverts dans les articles sur les fonctions et la programmation orientée objet. Pour l'instant, il suffit de retenir les deux patterns : « sort / reverse changent la liste juste en étant appelées » et « count / index se capturent avec = puis s'utilisent ».
Dans cet article, nous avons vu comment créer et accéder aux listes, le slicing, l'ajout et la suppression d'éléments, ainsi que le tri et la recherche.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Étant donné items = [3, 1, 4, 1, 5], qu'affiche print(items.sort()) ?
Question 3Étant donné data = [10, 20, 30, 40], quel est le résultat de data[-2:] ?