Première · Tableaux, textes et dictionnaires

Tableaux et listes Python : indices, accès et parcours

Un tableau transforme une série de données en cases que l’on peut consulter directement. Son principe paraît simple, mais confondre une valeur avec son indice suffit à dérégler une recherche ou une modification. Une représentation visuelle rend cette différence évidente.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Lire et modifier une case à partir de son indice
  • Distinguer parcours des valeurs et parcours des indices
  • Gérer les limites et le tableau vide
Les bases utiles pour commencer

L’indice désigne une place

Dans mesures = [14, 9, 21, 9], les quatre indices sont 0, 1, 2 et 3. mesures[2] vaut 21 ; le nombre 2 désigne une position, pas la deuxième valeur dans le langage courant. La longueur len(mesures) vaut 4, mais l’indice 4 est déjà hors limites. Plusieurs cases peuvent contenir la même valeur : ici 9 apparaît aux indices 1 et 3. Demander « où se trouve 9 ? » nécessite donc de préciser si l’on veut une occurrence, la première ou toutes les positions.

Un tableau peut avoir une longueur égale à l’une de ses valeurs, mais cette égalité est accidentelle. Pour diagnostiquer un accès, dessinez deux lignes : les indices au-dessus et les contenus au-dessous. On voit alors immédiatement si le programme manipule une position ou une donnée.

Modifier une case conserve son emplacement

L’affectation mesures[1] = 12 remplace le contenu de la case d’indice 1, sans modifier les autres cases ni changer la longueur. Pour augmenter une valeur, on peut écrire mesures[i] = mesures[i] + 1. La partie droite est calculée avant le remplacement, comme pour une variable simple. En Première, nous étudions les tableaux avec des éléments de même type et nous utilisons les listes Python pour les représenter. Leur redimensionnement dynamique et les bibliothèques comme NumPy ne sont pas nécessaires pour comprendre l’accès indexé demandé ici.

Une modification dépend de l’état au moment de la lecture. Si l’on remplace d’abord la première case, puis utilise cette case pour calculer la suivante, la seconde instruction lit la valeur nouvelle. Pour un calcul fondé sur les données initiales, il faut préserver les valeurs nécessaires.

Deux parcours pour deux besoins

Avec for valeur in mesures, la variable reçoit successivement les contenus des cases. Ce parcours convient pour calculer une somme ou afficher les mesures. Avec for i in range(len(mesures)), on parcourt les indices et on accède à mesures[i]. Ce second choix est utile pour modifier les cases ou renvoyer une position. Affecter valeur = valeur + 1 dans un parcours des entiers ne modifie pas le tableau : on réaffecte seulement le nom local de la boucle. Pour transformer les cases, il faut affecter aux indices ou construire un nouveau tableau.

mesures = [14, 9, 21, 9]
for i in range(len(mesures)):
    mesures[i] = mesures[i] + 1
print(mesures)

Un parcours direct est plus lisible lorsqu’on n’a besoin que des valeurs. Un parcours par indices rend explicites la position, les accès aux voisins et les modifications. Choisir l’un ou l’autre doit répondre à la question posée, et pas à une préférence de syntaxe.

Traiter la première et la dernière case avec soin

Le tableau vide possède une longueur nulle et aucun indice valide. Un parcours peut naturellement effectuer zéro passage, mais un accès direct à la première case échoue. Pour les tableaux non vides, l’indice du dernier élément est len(t) - 1. Les indices négatifs existent en Python, mais ne sont pas nécessaires pour apprendre le modèle indexé de base. La même prudence s’applique aux tranches : elles sont utiles, mais non exigibles en Première. Une solution reposant sur des indices ordinaires doit pouvoir être expliquée sans raccourcis syntaxiques.

Un tableau d’un élément possède à la fois sa première et sa dernière case à l’indice zéro. Ce cas révèle les boucles qui excluent involontairement une extrémité. Testez aussi une valeur répétée lorsque le contrat annonce une première occurrence ou toutes les positions.

Une transformation qui dépend des valeurs initiales

On veut remplacer chaque case, sauf la dernière, par la somme de cette case et de sa voisine droite. Sur [2, 5, 1], le résultat attendu est [7, 6, 1]. Un parcours de gauche à droite convient ici : lorsque l’on traite une case, sa voisine droite n’a pas encore été changée.

Un parcours de droite à gauche donnerait au contraire [8, 6, 1], car la première case lirait la nouvelle valeur six de sa voisine. Les deux programmes utilisent les mêmes indices, mais pas les mêmes instants de lecture. La spécification doit préciser si le calcul utilise les données originales ou les valeurs déjà mises à jour.

Rechercher une position avec une convention d’absence

Pour trouver la première occurrence de neuf dans [14, 9, 21, 9], on examine les indices dans l’ordre. L’indice un est le premier qui convient. Le second neuf, à l’indice trois, ne doit pas remplacer la réponse si le contrat exige la première occurrence.

On peut renvoyer immédiatement l’indice trouvé dans une fonction, puis renvoyer -1 après le parcours si aucun élément ne convient. Le tableau vide donne naturellement l’absence. Le programme appelant doit vérifier ce résultat spécial avant de lire une case, car en Python l’indice moins un possède aussi le sens du dernier élément.

À vous de faire varier les choses

Visez la bonne case

Choisissez un indice et une valeur de remplacement. Comparez l’état avant et après, puis essayez un indice hors limites.

Lire le résultat de l’expérience initiale

Case 1 modifiée

La longueur vaut 4. Les indices valides vont de 0 à 3.

IndiceAvantAprès
01414
1912
22121
399

La case et son contenu sont deux informations distinctes. Une bonne trace les affiche séparément.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · S’entraîner#

Valeur ou position

Avec t = [6, 4, 8, 4], donnez t[1], len(t), l’indice de la dernière case et les indices contenant 4.

Indice 1

Commencez la numérotation des cases à zéro.

Indice 2

Une même valeur peut figurer dans plusieurs cases.

Comprendre la correction

t[1] vaut 4, len(t) vaut 4 et le dernier indice vaut 3. La valeur 4 apparaît aux indices 1 et 3. La longueur et la valeur t[1] coïncident ici par hasard ; elles décrivent des propriétés différentes et ne doivent pas être confondues dans le raisonnement.

Exercice 2 · S’entraîner#

Modifier une seule case

On part de t = [3, 7, 2] et on exécute t[1] = t[0] + t[2]. Quel est le tableau final ?

Indice 1

Calculez d’abord la partie droite avec le tableau initial.

Indice 2

Seule la case d’indice 1 reçoit le résultat.

Comprendre la correction

La partie droite vaut 3 + 2 = 5. Le tableau devient [3, 5, 2]. Les cases d’indices 0 et 2 sont lues mais ne sont pas modifiées. La longueur reste trois : une affectation à une case remplace son contenu sans ajouter une nouvelle position.

Exercice 3 · S’entraîner#

Une augmentation sans effet

Pourquoi for valeur in t: valeur = valeur + 1 ne transforme-t-il pas un tableau d’entiers ? Proposez un parcours qui modifie les cases.

Indice 1

La variable valeur reçoit un entier, pas un accès permanent à la case.

Indice 2

L’affectation doit viser t[i].

Comprendre la correction

Le nom valeur est réaffecté à un nouvel entier, mais aucune instruction n’écrit dans le tableau. On utilise for i in range(len(t)): t[i] = t[i] + 1, avec l’affectation indentée. Chaque case est alors explicitement remplacée, ce qui réalise la transformation annoncée.

Exercice 4 · S’entraîner#

Le test du tableau vide

Une fonction parcourt tous les éléments pour calculer une somme initialisée à zéro. Une autre initialise son résultat avec t[0]. Comment se comportent-elles sur [] ?

Indice 1

Un parcours du vide effectue zéro passage.

Indice 2

Un accès au premier élément suppose qu’il existe.

Comprendre la correction

La somme renvoie naturellement zéro : l’accumulateur conserve sa valeur initiale. L’accès t[0] provoque une erreur car aucune case n’existe. Le contrat de la seconde fonction doit donc exclure le tableau vide ou prévoir un traitement spécifique. Le cas vide permet de distinguer ces deux conceptions dès la préparation des tests.

Exercice 5 · Approfondir et relier#

Deux ordres de modification

On part de [2, 5, 1]. On remplace chaque case sauf la dernière par sa valeur plus celle de droite. Tracez un parcours de gauche à droite puis de droite à gauche. Lequel utilise les couples de valeurs initiales ?

Indice 1

La case de droite peut avoir déjà été modifiée.

Indice 2

Écrivez l’état complet après chaque affectation.

Comprendre la correction

De gauche à droite, on obtient [7, 5, 1] puis [7, 6, 1]. De droite à gauche, on obtient [2, 6, 1] puis [8, 6, 1]. Le premier parcours lit toujours une voisine encore inchangée. L’ordre d’exécution fait donc partie de la méthode.

Exercice 6 · Approfondir et relier#

La première occurrence seulement

Une recherche de 4 dans [4, 2, 4, 8] mémorise l’indice chaque fois qu’elle rencontre la cible. Quelle réponse finale produit-elle ? Proposez une adaptation pour renvoyer la première occurrence. Donnez aussi le résultat attendu pour une cible absente.

Indice 1

Le dernier remplacement efface l’indice précédent.

Indice 2

Un retour immédiat termine la recherche dès la première rencontre.

Comprendre la correction

La version décrite finit à l’indice deux. Pour obtenir zéro, on peut renvoyer l’indice dès le premier test réussi, puis renvoyer moins un après la boucle seulement si rien n’a été trouvé. La cible absente donne alors moins un ; cette convention doit être annoncée et traitée par l’appelant.

Exercice 7 · Approfondir et relier#

Compter des changements entre voisins

Pour [3, 3, 5, 5, 2], comptez les positions où une valeur diffère de la précédente. Donnez les indices à comparer et le résultat. Adaptez votre raisonnement au tableau vide et à un seul élément.

Indice 1

La première comparaison utilise les indices zéro et un.

Indice 2

Le parcours des positions courantes commence à un.

Comprendre la correction

On compare les couples d’indices (0,1), (1,2), (2,3) et (3,4). Les changements apparaissent aux indices deux et quatre, donc le compteur vaut deux. Un parcours de range(1, len(t)) évite de lire un prédécesseur inexistant. Pour le vide et pour un élément, aucune comparaison n’a lieu et le résultat est zéro.

Les erreurs qui méritent un détour

Utiliser len(t) comme dernier indice
Le dernier indice d’un tableau non vide est len(t) - 1, puisque la numérotation commence à zéro.
Confondre changer la variable du parcours et changer une case
Seule une affectation à une case ou une reconstruction du tableau réalise la modification attendue.

La fiche à garder

L’essentiel à retenir

  • L’indice désigne une place et la valeur son contenu.
  • Un accès doit rester dans les limites du tableau.
  • Le parcours se choisit selon le résultat ou la modification recherchée.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.