Objectifs du parcours
Ce que tu vas savoir faire
- Décrire ordre, indices, doublons et mutabilité d’une liste Python.
- Générer une liste en extension, par ajouts successifs ou en compréhension.
- Lire et modifier un élément avec un indice valide.
- Distinguer append, extend et insert.
- Distinguer remove, pop et del et anticiper leurs erreurs possibles.
- Parcourir une liste par valeurs, indices ou couples indice-valeur.
- Construire et tracer un accumulateur, un compteur ou une liste filtrée.
- Distinguer alias et copie et éviter une mutation dangereuse pendant le parcours.
Le chapitre en bref
Une liste Python est une séquence ordonnée et mutable : chaque valeur occupe un indice de 0 à , les doublons sont conservés et une affectation comme L[i] = v modifie une case. On peut générer une liste en extension, par ajouts successifs ou en compréhension. append ajoute un objet, extend ajoute les éléments d’un objet parcourable, remove supprime une valeur et pop une position en renvoyant la valeur retirée. Le bon parcours dépend du besoin : for x in L pour les valeurs, range(len(L)) pour les indices, enumerate(L) pour les deux. Toute boucle doit enfin rendre visible son état : accumulateur, compteur ou nouvelle liste construite.
1. Qu’est-ce qu’une liste conserve exactement ?
Une liste Python conserve une suite ordonnée de valeurs entre crochets. La liste L = [12, 15, 12] possède trois éléments : le doublon 12 reste présent à deux positions. Contrairement à un ensemble mathématique, l’ordre et la répétition font donc partie de la donnée.
Les indices positifs commencent à 0. Si , les indices valides vont de 0 à ; l’accès L[n] provoque une IndexError. Une liste est mutable : L[1] = 18 remplace la valeur d’indice 1 sans changer la longueur.
2. Comment passer d’une règle à une liste ?
Une liste en extension écrit ses valeurs directement : carres = [0, 1, 4, 9]. Une construction par ajouts successifs part d’une liste vide, parcourt les valeurs utiles puis exécute carres.append(x**2). La trace des états [], [0], [0, 1], [0, 1, 4], [0, 1, 4, 9] rend l’algorithme contrôlable.
La compréhension carres = [x**2 for x in range(4)] construit la même liste. Lis-la en trois blocs : expression produite x**2 ; parcours for x in range(4) ; filtre éventuel if condition. [x for x in range(8) if x%2 == 0] conserve ainsi 0, 2, 4 et 6.
3. La tâche porte-t-elle sur une valeur ou sur sa position ?
Avec L = [4, 7, 9], L[1] lit 7 et ne modifie rien. L[1] = 8 remplace 7 par 8 : la liste devient [4, 8, 9] et garde trois éléments. Pour un indice i fourni par un calcul ou une saisie, le contrôle doit précéder l’accès.
Python autorise des indices négatifs : L[-1] désigne le dernier élément et L[-2] l’avant-dernier. Ce raccourci ne supprime pas la question de la liste vide. Si la position est la donnée importante, conserve l’indice ; si seule la valeur sert au calcul, un accès direct ou un parcours par valeurs suffit.
4. Pourquoi append([3,4]) et extend([3,4]) ne donnent-ils pas la même liste ?
append ajoute son argument comme un seul nouvel élément. Si L = [1, 2], alors L.append([3, 4]) produit [1, 2, [3, 4]]. extend parcourt son argument et ajoute chaque élément : L.extend([3, 4]) produit [1, 2, 3, 4]. insert(i, x) ajoute x avant l’indice i et décale les éléments suivants.
Ces méthodes modifient la liste sur place et renvoient None. Écrire L = L.append(5) perd donc le nom de la liste en lui affectant None. Pour contrôler une instruction, annonce avant l’exécution : objet ajouté, position visée, variation de longueur et valeur renvoyée.
5. Veux-tu supprimer une valeur ou une position ?
L.remove(x) supprime la première occurrence égale à x et déclenche ValueError si x est absent. L.pop(i) supprime l’élément d’indice i et le renvoie ; sans indice, pop retire le dernier élément. del L[i] supprime aussi par position mais ne renvoie pas la valeur.
Le contrôle dépend donc de la question. Pour une suppression par valeur, teste x in L si l’absence est possible. Pour une suppression par indice positif, vérifie . Après la mutation, les indices des éléments suivants peuvent changer.
6. As-tu besoin de la valeur, de l’indice ou des deux ?
for x in L parcourt directement les valeurs : c’est le choix le plus simple pour sommer, tester ou afficher. for i in range(len(L)) parcourt les indices de 0 à et permet d’utiliser ou de modifier L[i]. for i, x in enumerate(L) fournit simultanément indice et valeur.
Ne choisis pas range(len(L)) par réflexe : il ajoute une opération d’indexation inutile si seule x est utilisée. Une liste vide produit zéro tour de boucle ; l’état initial d’un accumulateur reste alors l’état final, ce qui doit être interprété dans le problème.
7. Comment suivre ce que la boucle a déjà accompli ?
Un accumulateur possède un invariant, c’est-à-dire un sens vrai après chaque tour. Si s = 0 puis s = s + x, s représente la somme des valeurs déjà parcourues. Si c = 0 et c augmente seulement lorsque , c représente l’effectif des valeurs déjà lues qui vérifient la condition.
Pour filtrer, pars de R = [] puis ajoute à R les valeurs admissibles ; la compréhension construit directement une nouvelle liste équivalente. Une table de trace avec numéro du tour, valeur courante, condition et état après mise à jour révèle les erreurs d’initialisation, de test ou de placement de l’instruction.
8. Pourquoi B=A peut-il modifier A sans le nommer ?
Après B = A, les deux noms désignent la même liste. B.append(5) modifie donc aussi l’objet observé par A. Pour séparer les modifications de la liste extérieure, utilise B = A.copy() ou une construction nouvelle comme B = [2*x for x in A].
Modifier la longueur de L pendant for x in L décale les positions et peut faire sauter des éléments. Il est généralement plus sûr de construire une nouvelle liste à partir de L. Le contrôle final compare identité des objets, valeurs attendues, longueur et conservation de la source.
Erreurs fréquentes
L'essentiel à mémoriser
- Les indices commencent à zéro.
- Une compréhension produit une nouvelle liste.
- Lire, remplacer et ajouter sont trois opérations distinctes.
- append et extend n’ajoutent pas la même chose.
- Valeur et position choisissent la suppression.
- Le besoin choisit le type de parcours.
- Un invariant donne un sens à chaque tour.
- Alias et copie produisent des mutations différentes.
Vérifier sa compréhension
Réviser au bon moment
Poursuivre le parcours
Sources et traçabilité
Dernière vérification : 2026-08-12
- Arrêté du 18 mars 2026 — programme de spécialité de mathématiques de Première, Bulletin officiel de l’Éducation nationale, consulté le 2026-08-11.
- Annexe — Programme de spécialité de mathématiques de Première 2026, Ministère de l’Éducation nationale, consulté le 2026-08-11.
- Programmes et ressources en mathématiques — voie générale et technologique, Éduscol — Ministère de l’Éducation nationale, consulté le 2026-08-11.
- Structures de données — compléments sur les listes, Documentation officielle Python, consulté le 2026-08-11.