Première · Tableaux, textes et dictionnaires

Tableaux à deux dimensions et matrices

Une image, un plateau de jeu ou un relevé organisé par jour et par capteur demande deux coordonnées. Un tableau de tableaux représente cette organisation. Comprendre ce que désignent les deux indices permet d’agir sur la bonne case sans inverser lignes et colonnes.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Accéder à une case avec la notation a[i][j]
  • Parcourir les lignes et les colonnes d’une matrice
  • Construire une grille rectangulaire avec des lignes indépendantes
Les bases utiles pour commencer

Un tableau dont les éléments sont des lignes

La matrice [[2, 5, 1], [7, 0, 4]] contient deux lignes, chacune de trois éléments. Le premier accès a[1] fournit la seconde ligne [7, 0, 4]. Le second accès a[1][2] fournit ensuite sa case d’indice 2, donc 4. La notation se lit de l’extérieur vers l’intérieur : on choisit d’abord le tableau ligne, puis son élément. Une matrice rectangulaire conserve la même longueur pour toutes les lignes. Des tableaux de longueurs différentes sont possibles en Python, mais demandent une interprétation et des parcours adaptés.

La longueur du tableau extérieur mesure le nombre de lignes. La longueur d’une ligne mesure le nombre de colonnes de cette ligne. Pour le tableau vide, il n’existe aucune première ligne dont on pourrait mesurer la longueur : ce cas doit être prévu avant un accès à a[0].

Choisir une convention visible

Nous utilisons i pour l’indice de ligne et j pour l’indice de colonne, tous deux à partir de zéro. Dans une grille affichée, la ligne zéro est en haut et la colonne zéro à gauche. Cette convention n’est pas celle d’un repère mathématique où l’axe vertical croît souvent vers le haut. Les noms et les étiquettes du schéma doivent donc être explicites. Pour une matrice de h lignes et l colonnes, les accès valides vérifient 0 <= i < h et 0 <= j < l.

Les indices ne sont pas des coordonnées géométriques universelles. Dans une image, augmenter la ligne descend souvent dans l’affichage. Une consigne comme « voisin du dessus » se traduit donc par une ligne diminuée de un, à condition que cette ligne existe.

Parcourir avec deux boucles

Pour examiner toutes les cases ligne par ligne, une boucle extérieure choisit la ligne, puis une boucle intérieure parcourt ses colonnes. Dans une matrice de deux lignes et trois colonnes, six cases sont visitées. Pour calculer un total général, on initialise le total avant les deux boucles. Pour obtenir un total par ligne, on initialise un accumulateur au début de chaque nouvelle ligne. Ce placement traduit la portée du résultat : conserver toutes les contributions ou recommencer pour chaque groupe.

a = [[2, 5, 1], [7, 0, 4]]
total = 0
for i in range(len(a)):
    for j in range(len(a[i])):
        total = total + a[i][j]
print(total)

Un parcours de toutes les cases d’une grille rectangulaire de h lignes et l colonnes visite h fois l éléments. Pour une seule colonne, il en visite h ; pour une seule ligne, l. Annoncer le parcours permet donc de prévoir le nombre de contributions au total.

Construire des lignes réellement distinctes

La compréhension [[0 for j in range(3)] for i in range(2)] construit deux lignes séparées de trois zéros. Une écriture qui répète plusieurs fois le même tableau intérieur peut partager une seule ligne entre plusieurs positions : modifier une case semble alors modifier plusieurs lignes. Ce détail Python prépare les questions de références approfondies en Terminale. En Première, on peut éviter ce piège avec une construction explicite et vérifier le résultat en modifiant une seule case. La représentation doit correspondre au modèle : chaque ligne d’un plateau indépendant doit pouvoir évoluer séparément.

Une grille peut être correctement affichée au départ alors que ses lignes sont partagées. Le test utile consiste à changer une seule case puis vérifier toutes les autres. L’apparence initiale ne permet pas de distinguer plusieurs lignes indépendantes d’une même ligne répétée.

Sélectionner une zone par une condition sur les indices

Dans la grille [[2, 5, 1], [7, 0, 4], [3, 8, 6]], la ligne un contient sept, zéro et quatre, soit onze. La colonne un contient cinq, zéro et huit, soit treize. La diagonale principale contient les cases où les deux indices sont égaux : deux, zéro et six, soit huit.

Ces trois sélections examinent la même grille, mais fixent ou relient les indices différemment. Pour une diagonale principale d’une matrice carrée, on peut accéder directement à a[i][i]. Une matrice rectangulaire exige de limiter ce parcours à la plus petite dimension pour rester dans les cases existantes.

Examiner des voisins sans sortir de la grille

Pour une case de ligne i et colonne j, les voisins orthogonaux possibles sont au-dessus, au-dessous, à gauche et à droite. Une case intérieure en possède quatre, une case sur un bord ordinaire trois, et un coin deux dans une grille ayant au moins deux lignes et deux colonnes.

Chaque voisin doit être validé dans les deux dimensions avant lecture. Pour le coin supérieur gauche, seuls (1, 0) et (0, 1) existent. Lire une ligne moins un en Python ne provoque pas nécessairement une erreur : cela peut viser la dernière ligne, ce qui ne représente pas le voisin géométrique attendu.

À vous de faire varier les choses

Explorez lignes, colonnes et diagonale

Choisissez le parcours. Repérez les cases sélectionnées et vérifiez leur somme ; les deux indices restent visibles.

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

Somme des cases sélectionnées : 11

La première coordonnée choisit la ligne ; la seconde choisit la colonne. Les cases actives sont celles qui contribuent à la somme.

LigneColonneValeurSélectionnée
002Non
015Non
021Non
107Oui
110Oui
124Oui
203Non
218Non
226Non

Fixer une ligne ou fixer une colonne correspond à deux parcours différents du même ensemble de cases.

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#

Retrouver une case

Pour a = [[4, 8, 1], [6, 3, 9]], donnez a[0], a[1][0] et a[0][2].

Indice 1

Le premier indice choisit la ligne.

Indice 2

Le second indice est interprété à l’intérieur de cette ligne.

Comprendre la correction

a[0] vaut [4, 8, 1], car cet accès fournit une ligne entière. a[1][0] vaut 6, premier élément de la seconde ligne. a[0][2] vaut 1, troisième élément de la première ligne. Les résultats n’ont donc pas tous le même type : une ligne est un tableau, une case contient ici un entier.

Exercice 2 · S’entraîner#

Un total par colonne

Calculez les sommes des colonnes de [[2, 5], [7, 1], [3, 4]]. Décrivez quel indice doit rester fixe pendant une somme.

Indice 1

Une colonne conserve sa position horizontale à travers toutes les lignes.

Indice 2

Additionnez d’abord les éléments d’indice 0 de chaque ligne.

Comprendre la correction

La première colonne vaut 2 + 7 + 3 = 12 ; la seconde vaut 5 + 1 + 4 = 10. Pour chaque somme, l’indice de colonne j reste fixe tandis que l’indice de ligne i varie. Inverser cette logique donnerait les sommes de lignes 7, 8 et 7.

Exercice 3 · S’entraîner#

La mauvaise frontière

Une grille possède trois lignes et cinq colonnes. Pourquoi a[3][0] est-il invalide alors que a[2][4] est valide ?

Indice 1

La longueur compte les éléments, mais les indices commencent à zéro.

Indice 2

Écrivez séparément les ensembles d’indices autorisés.

Comprendre la correction

Les indices de lignes sont 0, 1 et 2 ; les colonnes vont de 0 à 4. a[3][0] demande une quatrième ligne inexistante. a[2][4] désigne la troisième ligne et la cinquième colonne, donc la dernière case. Vérifier les deux dimensions empêche de confondre taille et dernier indice.

Exercice 4 · S’entraîner#

Replacer l’initialisation

Pour calculer la somme de toutes les cases, un programme remet total à zéro au début de chaque ligne. Que contiendra-t-il à la fin ? Où déplacer l’initialisation ?

Indice 1

Les contributions des lignes précédentes sont effacées.

Indice 2

Le total recherché doit survivre au changement de ligne.

Comprendre la correction

À la fin, total contient uniquement la somme de la dernière ligne. Il faut initialiser total avant la boucle extérieure, puis ajouter chaque case dans la boucle intérieure. Une remise à zéro par ligne serait correcte pour produire plusieurs sommes de lignes, à condition de conserver chacune avant de recommencer.

Exercice 5 · Approfondir et relier#

Trois parcours dans la même grille

Pour [[4, 1, 7], [2, 8, 3], [6, 0, 5]], calculez la somme de la ligne un, de la colonne un et de la diagonale principale. Pour chaque parcours, précisez quel indice est fixe ou quelle relation unit les indices.

Indice 1

La ligne un est la deuxième ligne.

Indice 2

Sur la diagonale principale, les indices sont égaux.

Comprendre la correction

La ligne un donne 2 + 8 + 3, soit treize. La colonne un donne 1 + 8 + 0, soit neuf. La diagonale donne 4 + 8 + 5, soit dix-sept. Le premier parcours fixe la ligne, le second fixe la colonne et le troisième impose l’égalité des indices.

Exercice 6 · Approfondir et relier#

Les voisins d’un coin

Dans [[4, 1, 7], [2, 8, 3]], on étudie les voisins orthogonaux de la case (0,0). Donnez les positions valides, leurs valeurs et leur somme. Expliquez pourquoi accéder à la ligne -1 ne représente pas un voisin supérieur valide.

Indice 1

Un voisin orthogonal change exactement un indice d’une unité.

Indice 2

La ligne zéro n’a pas de ligne au-dessus.

Comprendre la correction

Les voisins sont (0,1), de valeur un, et (1,0), de valeur deux. La somme vaut trois. La position (-1,0) est hors de la grille géométrique ; Python pourrait pourtant l’interpréter comme la dernière ligne. Il faut donc tester les bornes positives explicitement au lieu de compter seulement sur une erreur d’accès.

Exercice 7 · Approfondir et relier#

Comparer le total général aux totaux de lignes

Une matrice vaut [[3, 1], [5, 2], [4, 6]]. Un programme remet le total à zéro au début de chaque ligne. Donnez les trois totaux de lignes et la valeur finale conservée. Corrigez pour obtenir le total général et vérifiez par un autre regroupement.

Indice 1

La dernière initialisation efface les lignes précédentes.

Indice 2

Additionnez les totaux de lignes pour une vérification indépendante.

Comprendre la correction

Les totaux de lignes sont quatre, sept et dix. La valeur finale conservée est seulement dix. Initialiser avant les deux boucles donne vingt et un. On vérifie aussi par colonnes : 3 + 5 + 4 vaut douze et 1 + 2 + 6 vaut neuf, soit vingt et un.

Les erreurs qui méritent un détour

Inverser a[i][j] et a[j][i]
Une grille non carrée révèle rapidement cette erreur. Nommez et affichez les deux dimensions.
Croire qu’un accès simple fournit toujours une case
Avec un tableau de tableaux, a[i] fournit d’abord une ligne entière.

La fiche à garder

L’essentiel à retenir

  • a[i][j] choisit une ligne puis une case.
  • Deux dimensions impliquent deux limites à vérifier.
  • L’emplacement de l’accumulateur détermine la portée du total.

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.