Un tableau (type List en Python), est une structure de données qui permet
de stocker une collection ordonnée d’éléments de même type dans une seule
variable. Son principal intérêt est de nous éviter de devoir créer une variable
distincte pour chaque élément d’un ensemble.
- Problème sans tableau : Pour gérer 5 notes par exemple, on serait contraint
de créer 5 variables différentes (
note1,note2,note3, …), rendant les opérations communes (comme calculer une moyenne) très laborieuses. - Solution avec un tableau : Une seule variable (
notes) contient l’ensemble des données, ce qui permet de les traiter de manière collective et efficace via des boucles ; exemple :
les_notes = [] #initialisation du tableau vide
saisie = input("Saisir une note : ")
while saisie != "": #tant qu'il y a une saisie
les_notes.append(int(saisie)) #conversion et mémorisation
saisie = input("Saisir une note : ") #saisie de la note suivante
total = 0
for note in les_notes:
total = total + note #algorithme du cumul
print("Note : " + str(note) + ", Total : " + str(total))
if len(les_notes) != 0: #pour éviter une division par 0
moyenne = round(total / len(les_notes), 2)
print("Moyenne : " + str(moyenne))
Ce programme n’utilise qu’une seule variable les_notes, quel que soit le
nombre de notes ;
- à la première itération,
les_notes = [](tableau vide) ; - à la deuxième itération,
les_notes = [14](si l’utilisateur a saisit 14) ; - à la troisième itération,
les_notes = [14, 12](si l’utilisateur a saisit 12) ; - …
Création et initialisation
Création d’un tableau vide ; les crochets ([ et ]) marquent le début et
la fin d’un tableau :
nomTableau = []
Il est possible d’initialiser le contenu d’un tableau en énumérant ses éléments séparés par des virgules ; exemples :
notes = [12, 15, 9, 18] #collection de notes (entiers)
mots = ["bonjour", "le", "monde"] #collection de mots (chaînes de caractères)
Nombre d’éléments
La fonction len(nomTableau) renvoie le nombre d’éléments du tableau ; exemple
fruits = ["banane", "mangue", "passion"]
nb_elements = len(fruits)
print("Nombre de fruits : " + str(nb_elements))
#ou: print("Nombre de fruits : " + str(len(fruits)))
Extraction d’un élément ou sous-tableau
Il est possible d’extraire un élément ou un sous-tableau d’un tableau, exactement
comme avec les chaînes de caractères ; rappel, les indices vont de 0 à len(tableau) - 1 ; exemple :
fruits = ["banane", "mangue", "papaye", "ananas", "passion"]
print(fruits[4]) #élément
print(fruits[1:3]) #sous-tableau
Tableaux, chaînes et tuples
Comme une chaîne est une séquence de caractères, un tableau est une séquence
d’éléments. En Python, la différence majeure est que les tableaux sont mutables
(modifiables) : on peut ajouter, supprimer ou changer leurs éléments après
leur création, contrairement aux chaînes qui sont immuables ; par exemple,
ch = ch + "..." crée une nouvelle chaîne (qui écrase l’ancienne).
Points d’attention :
- L’usage premier d’un tableau est de gérer une collection d’éléments de même type.
- Les tableaux Python sont dynamiques : leur taille s’ajuste automatiquement lorsque vous ajoutez ou supprimez des éléments ; ce n’est pas le cas dans tous les langages de programmation.
Les tuples sont des tableaux immuables (non modifiables). Ils sont créés avec des parenthèses à la place des crochets ; exemple :
jours = ("lundi", "mardi", "…", "dimanche")
Un tableau peut être modifié par l’ajout ou la suppression d’éléments.
Ajout d’éléments
Deux méthodes permettent d’ajouter des éléments au tableau :
- Ajout en fin de tableau avec
nomTableau.append(valeur); exemple :
fruits = ["banane", "mangue"]
fruits.append("ananas")
print(fruits)
Remarque : l’opération append est au tableau ce que la concaténation +
est à une chaîne de caractères.
- Insertion à un index précis avec
nomTableau.insert(valeur, index); exemple :
fruits = ["banane", "mangue"]
fruits.insert(1, "ananas")
print(fruits)
Remarque : cette méthode nécessite de décaler d’une position vers la droite les éléments à partir de l’index d’insertion (pour faire un “trou”), ce qui la rend moins efficace que l’ajout à la fin.
Suppression d’éléments
Il y a trois méthodes principales pour supprimer un élément :
- Suppression du dernier élément
valeur = nomTableau.pop()cette méthode supprime et renvoie le dernier élément du tableau ; exemple :
fruits = ["banane", "mangue", "papaye", "ananas"]
dernierFruit = fruits.pop()
print(dernierFruit)
print(fruits)
- Suppression d’un élément à un index précis avec
valeur = nomTableau.pop(index); comme pour l’insertion, cette méthode nécessite de décaler vers la gauche les éléments suivant l’index (pour boucher le “trou”) ; exemple :
fruits = ["banane", "mangue", "papaye", "ananas"]
troisiemeFruit = fruits.pop(2)
print(troisiemeFruit)
print(fruits)
print(str(len(fruits)))
- Suppression par valeur avec
nomTableau.remove(valeur); cette méthode supprime la première occurrence de la valeur dans le tableau ;
fruits = ["banane", "mangue", "banane", "ananas"]
fruits.remove("banane")
print(fruits) #il reste une banane
Attention : les méthodes pop et remove lèvent une exception ValueError
si l’indice (index) est invalide ou si la valeur n’est pas dans le tableau.
Le parcours d’un tableau est une opération fondamentale, permettant d’accéder à chacun de ses éléments pour les traiter. Les méthodes de parcours analogues à celles utilisées pour les chaînes de caractères.
Parcours direct, par élément
Le parcours direct, “pour chaque valeur du tableau" : for valeur in nomTableau: ; exemple :
fruits = ["banane", "mangue", "papaye", "ananas"]
for fruit in fruits:
print(fruit)
Parcours avec indice :
Le parcours avec indice, “pour chaque indice du tableau" : for i in range(len(tableau)) ; exemple :
fruits = ["banane", "mangue", "papaye", "ananas"]
for i in range(len(fruits)):
fruit = fruits[i]
print(str(i) + " : " + fruit)
Le parcours avec indice est également possible avec l’itérative while :
i = 0
while i < len(fruits):
fruit = fruits[i]
print(str(i) + " : " + fruit)
i = i + 1
Points d’attention :
- Le parcours par élément est généralement plus simple et lisible. Utiliser
le parcours par indice seulement s’il est nécessaire de connaître la position
des éléments, ou dans une itérative
while. - Ne pas modifier le tableau pendant son parcours. Si besoin, utiliser un deuxième tableau.
Ces algorithmes de parcours permettent de résoudre des problèmes récurrents.
Exemple de compte et cumul
notes = [12, 15, 9, 18, 15]
compte = 0
total = 0
for note in notes:
compte = compte + 1
total = total + note
moyenne = None if compte == 0 else round(total / compte, 2)
print("La moyenne est : " + str(moyenne))
Exemple de recopie
notes = [12, 11, 9, 18, 15]
bonnes_notes = []
for note in notes:
if note >= 12:
bonnes_notes.append(note)
print(bonnes_notes)
Recherche
- Première version :
fruits = ["banane", "mangue", "papaye", "ananas", "passion"]
fruit_recherche = input("Saisir le nom d'un fruit : ")
found = False
i = 0
while not found and i < len(fruits):
if fruits[i] == fruit_recherche:
found = True
else:
i = i + 1
if found:
print(fruit_recherche + " trouvé à l'indice " + str(i))
else:
print(fruit_recherche + " non trouvé")
- Autre écriture équivalente :
fruits = ["banane", "mangue", "papaye", "ananas", "passion"]
fruit_recherche = input("Saisir le nom d'un fruit : ")
i = 0
while i < len(fruits) and fruits[i] != fruit_recherche:
i = i + 1
print("-1" if i == len(fruits) else str(i))
Fonction index
La fonction nomTableau.index(valeur) renvoie l’indice de la première occurrence
de la valeur, et lève une exception si elle n’est pas trouvée ; exemple :
fruits = ["banane", "mangue", "papaye", "ananas", "passion"]
fruit_recherche = input("Saisir le nom d'un fruit : ")
try: #pour contenir une instruction qui peut échouer
i = fruits.index("bananed")
print(fruit_recherche + " trouvé à l'indice " + str(i))
except ValueError: #pour capturer l'erreur
print(fruit_recherche + " non trouvé")
Opérateur in
Si on souhaite seulement savoir si une valeur est présente dans un tableau,
on peut utiliser l’opérateur in :
fruits = ["banane", "mangue", "papaye", "ananas", "passion"]
fruit_recherche = input("Saisir le nom d'un fruit : ")
if fruit_recherche in fruits:
print(fruit_recherche + " trouvé")
else:
print(fruit_recherche + " non trouvé")
Fonctions join et split
Les méthodes chaine = separateur.join(tableau) et tableau = chaine.split(separateur)
permettent de convertir une chaîne de caractères en tableau et inversement. Exemples :
phrase = "Iaorana la Polynésie"
mots = phrase.split(" ")
for mot in mots:
print(mot)
fusion = "-".join(mots) #attention: contre-intuitif
print(fusion)
Tri
Il est parfois nécessaire d’ordonner les éléments d’un tableau. Ici encore, deux approches sont possibles :
- Tri en place avec
nomTableau.sort(); cette méthode modifie le tableau original en ordonnant ses éléments par ordre croissant ; exemple :
nombres = [3, 1, 4, 1, 5]
nombres.sort()
print(nombres)
Pour trier par ordre décroissant, utiliser la méthode reverse ; exemple :
nombres = [3, 1, 4, 1, 5]
nombres.sort()
nombres.reverse() #à faire en deux opérations (sort puis reverse)
print(nombres)
- Création d’un tableau trié avec
nouveauTableau = sorted(nomTableau); cette méthode ne modifie pas le tableau original, mais renvoie un nouveau tableau trié ; exemple :
nombres = [3, 1, 4, 1, 5]
nombres_tries = sorted(nombres)
print(nombres)
print(nombres_tries)
Pour trier par ordre décroissant, c’est possible en une seule opération avec
le “slicing” [::-1] ; exemple :
nombres = [3, 1, 4, 1, 5]
nombres_tries_inverses = sorted(nombres)[::-1]
print(nombres_tries_inverses)
Attention : le tri une opération coûteuse (en temps de calcul) ; par exemple, pour trier 1000 éléments, il faut faire 10000 comparaisons.