Aller au contenu

Les Tableaux

Ce cours a en très grande partie été écrit par Nicolas Revéret

I. Présentation⚓︎

Vidéo de Charles Poulmaire

Considérons le tableau ci-dessous présentant les fruits préférés d'un consommateur

Poire Pomme Orange Kiwi ...

Ce tableau a plusieurs caractéristiques :

  • le fruit préféré du consommateur est dans la première colonne et c'est la « Poire » ;
  • les types de valeurs sont uniformes : le tableau présente les fruits préférés du consommateur. Il est impossible d'y trouver la valeur « 3,59 » ;
  • ce tableau comporte quatre colonnes, on ne peut pas en rajouter ni en supprimer.

En informatique, un tableau reprend ces caractéristiques :

  • un tableau est une structure de données linéaire. Cela signifie qu'il contient différents éléments, rangés dans un certain ordre.
  • un tableau est de longueur fixe. Une fois créé, il est impossible d'ajouter ou de supprimer des valeurs.
  • les éléments d'un tableau sont tous du même type. Un tableau ne peut donc pas contenir un nombre entier suivi d'une chaîne de caractères.

Le type list de Python permet de représenter de tels tableaux. Dans toute la suite de ce cours, tous les tableaux seront représentés en Python par des list.

Remarque

En réalité les list Python ne sont pas des tableaux au sens plein du terme : ils peuvent contenir des éléments de types variés et leur taille peut évoluer.

Dans tout ce cours, on utilisera tout de même le type list afin de représenter les tableaux mais l'on fera en sorte de :

  • ne jamais modifier la longueur d'une list,
  • de n'y stocker que des éléments du même type.

Pour déclarer une list on peut délimiter ses éléments avec des crochets :

🐍 Console Python
>>> nombres = [3, 8, 7]
>>> fruits = ['Poire', 'Pomme', 'Orange', 'Kiwi']

Cette façon de faire est fastidieuse si le tableau comporte beaucoup de valeurs. Il existe d'autres façons de procéder. Retenons la suivante qui permet de créer un tableau contenant 1 000 fois la valeur None (qui peut s'apparenter à une valeur vide, on ne fait que créer des cellules afin de les compléter ultérieurement) :

🐍 Console Python
>>> mille_cellules = [None] * 1000

Dans un tableau, chaque élément se trouve à une position précise : il y a le premier élément, le deuxième, le troisième etc. La position d'un élément dans le tableau est donnée par son indice.

Attention

Comme dans beaucoup de langages de programmation, en Python, les indices débutent à 0 !

Ainsi, le premier élément est à l'indice 0.

Indice 0 1 2 3 4
Valeur "Poire" "Pomme" "Orange" "Kiwi" None

Connaissant l'indice d'un élément dans un tableau, il est possible de récupérer sa valeur en utilisant la notation tableau[indice]. Par exemple :

🐍 Console Python
>>> fruits = ['Poire', 'Pomme', 'Orange', 'Kiwi']
>>> fruits[0]
'Poire'
>>> fruits[3]
'Kiwi'
Tableau et mémoire

Dans les langages de programmation tels que C, un tableau est stocké en machine sous forme de cellules contigües.

Connaissant l'adresse \(A_0\) de la première cellule dans la mémoire, la taille \(t\) d'une cellule (fixe car les éléments sont tous de même type) et l'indice \(i\) d'un élément, il est aisé de calculer son adresse mémoire avec \(A_i=A_0+t\times i\).

Le fonctionnement est différent en Python car les éléments d'une list peuvent être de types différents, ou de taille variable. Ainsi Python ne stocke pas les valeurs dans les cellules mais leurs adresses (qui, elles, sont de taille constante).

Cette instruction permet aussi de modifier une valeur :

🐍 Console Python
>>> fruits = ['Poire', 'Pomme', 'Orange', 'Kiwi']
>>> fruits[1] = 'Banane'
>>> fruits
['Poire', 'Banane', 'Orange', 'Kiwi']

Il est possible de connaître le nombre d'éléments contenus dans un tableau en utilisant la fonction len. Cette grandeur est la longueur du tableau (length en anglais).

🐍 Console Python
>>> fruits = ['Poire', 'Pomme', 'Orange', 'Kiwi']
>>> len(fruits)
4

II. Premiers exercices⚓︎

Question

On considère le tableau meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet'].

  • meubles[1] vaut 'Table'
  • meubles[1] vaut 'Commode'
  • meubles[4] vaut 'Buffet'
  • meubles[5] vaut 'Buffet'
  • ❌ Les indices débutent à 0. Donc 'Table' est à l'indice 0
  • ✅ meubles[1] vaut bien 'Commode'
  • ✅ meubles[4] vaut bien 'Buffet'
  • ❌ Le tableau contient 5 éléments. Le dernier éléments est donc à l'indice 4
Question

On considère désormais le tableau pointures = [38, 43, 44, 43, 37, 42, 39, 43, 40].

  • Ce tableau est mal défini car il contient des valeurs en double
  • pointures[38] vaut 0
  • pointures[3] est égal à pointures[8]
  • pointures[len(pointures) - 1] vaut 40
  • ❌ Un tableau peut tout à fait contenir des valeurs en double
  • ❌ Attention à ne pas confondre indice et valeur. Ici c'est pointures[0] qui vaut 38
  • ❌ pointures[3] est en réalité égal à pointures[7]
  • ✅ Comme on a len(pointures) qui vaut 9, le dernier élément est bien à l'indice 9 - 1 c'est à dire 8
Question

Compléter le script ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Shift+Esc ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution
🐍 Script Python
# Saisir l'indice permettant d'afficher 'Armoire'
print(meubles[2])

# Saisir l'instruction permettant d'afficher 'Buffet'
print(meubles[4])
# Ou :
print(meubles[len(meubles) - 1])

# Saisir l'instruction permettant d'afficher la longueur du tableau
print(len(meubles))

# Compléter la boucle afin d'afficher tous les meubles du tableau
for indice in range(len(meubles)):
    print(meubles[indice], end=", ")

III. Les indices négatifs⚓︎

👉 Il est parfois pratique d'utiliser des indices négatifs :

Les indices négatifs

L'indice -1 correspond au dernier élément de la liste, l'indice -2 l'avant dernier, l'indice -3 l'avant avant dernier, etc...

Indice -5 -4 -3 -2 -1
Valeur "Poire" "Pomme" "Orange" "Kiwi" None
Testez

Recopiez dans l'éditeur ci-dessous les instructions suivantes, puis tester

🐍 Script Python
t1 = [1, "2", 3, "c", "f"]
print(t1[-1])
print(t1[-2])
print(t1[-5])

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Shift+Esc ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

IV. QCM⚓︎

Les tableaux - QCM 2

  1. Cocher toutes les bonnes réponses
    meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']
    
    commode correspond à

    • meubles[1]

    • meubles[2]

    • meubles[-4]

    • meubles[- 3]

  2. Cocher toutes les bonnes réponses
    meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']
    
    Buffet correspond à

    • meubles[4]

    • meubles[5]

    • meubles[0]

    • meubles[- 1]

  3. Cocher toutes les bonnes réponses
    meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']
    
    Table correspond à

    • meubles[0]

    • meubles[1]

    • meubles[- 1]

    • meubles[- 5]

  4. Cocher toutes les bonnes réponses
    meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']
    
    Armoire correspond à

    • meubles[2]

    • meubles[3]

    • meubles[- 3]

    • meubles[- 2]

  5. Cocher toutes les bonnes réponses
    meubles = ['Table', 'Commode', 'Armoire', 'Placard', 'Buffet']
    
    len(meubles) vaut

    • 4

    • 5

    • - 5

    • 6