Tables et listes Tuto

Tables et listes

Durée estimée
10 minutes
Votre progression

Créez un compte gratuit pour suivre votre avancement et reprendre où vous avez laissé.

Créer un compte

Tables et listes : la structure reine de Python

Jusqu'ici tes programmes manipulaient une poignée de variables isolées : un nombre, une chaîne, un booléen. Mais que faire quand on a besoin de 100 notes, 26 lettres de l'alphabet ou toutes les températures de la semaine ? On les range dans une liste : un seul nom de variable pour une collection ordonnée de valeurs.

À la fin de cette fiche, tu sauras créer une liste, accéder à ses éléments par leur position, la modifier (ajouter, supprimer, trier), la parcourir avec for, en extraire des morceaux avec le slicing, et enfin manipuler des tableaux à deux dimensions (listes de listes).

Remarque

Comment lire cette fiche. Tu vas rencontrer deux types d'exercices à la suite des explications :

  • Complète le programme — 1 ou 2 mots à compléter, juste après chaque nouveau concept.
  • À toi de jouer — un petit programme à finir, en fin de section.

Chaque cellule s'exécute en cliquant sur Exécuter. En cas d'erreur, lis le message rouge : il indique la ligne fautive et le type d'erreur.

Créer une liste et accéder à ses éléments

Une liste s'écrit entre crochets, avec les éléments séparés par des virgules. Les éléments peuvent être de n'importe quel type, et peuvent même être mélangés.


            

Pour lire un élément, on indique sa position (ou indice) entre crochets. Attention : en Python, le premier élément a l'indice 0, pas 1.


            

Un indice négatif compte à partir de la fin : notes[-1] est la dernière note, notes[-2] l'avant-dernière. Très pratique pour récupérer la fin sans calculer la longueur.


            

Complète le programme

Affiche le troisième élément de la liste (souviens-toi : indice 2) :


        
Voir la solution
fruits = ['pomme', 'banane', 'cerise', 'datte']
print(fruits[2])

Complète le programme

Affiche le dernier élément de la liste sans utiliser len :


        
Voir la solution
ages = [12, 14, 13, 15, 16, 14]
print(ages[-1])

À toi de jouer

On te donne une liste de cinq températures. Calcule la différence entre la plus chaude (3e élément) et la plus froide (5e élément), puis affiche le résultat.


        
Voir la solution
temperatures = [12, 18, 23, 15, 9]
print(temperatures[2] - temperatures[4])

Remarque

Spécificité Python — l'IndexError. Si tu demandes un indice qui n'existe pas (par exemple notes[10] dans une liste de 5 éléments), Python lève une IndexError: list index out of range. Contrairement à C qui lirait silencieusement n'importe quoi en mémoire, Python te protège des accès hors-bornes — au prix d'une exception qu'il faut éviter.

Modifier une liste : ajouter, supprimer, trier

Les listes sont mutables : on peut changer leur contenu après leur création. Les méthodes les plus utiles sont append (ajouter à la fin), insert (insérer à une position), remove (supprimer la première occurrence d'une valeur) et pop (supprimer et renvoyer un élément).


            

On peut aussi réaffecter directement un élément à une position donnée :


            

Pour trier, deux options : la méthode sort() qui modifie la liste sur place, ou la fonction sorted(...) qui renvoie une nouvelle liste triée sans toucher à l'originale.


            

Complète le programme

Ajoute la valeur 100 à la fin de la liste, puis affiche-la :


        
Voir la solution
scores = [10, 20, 30]
scores.append(100)
print(scores)

Complète le programme

Trie la liste par ordre croissant, puis affiche le plus petit élément (premier après tri) :


        
Voir la solution
valeurs = [42, 7, 19, 3, 28]
valeurs.sort()
print(valeurs[0])

À toi de jouer

Tu disposes d'une liste d'élèves. Ajoute « Léa » à la fin, retire « Tom » du milieu, puis affiche la liste finale triée par ordre alphabétique.


        
Voir la solution
eleves = ['Marie', 'Tom', 'Yann', 'Aïcha']
eleves.append('Léa')
eleves.remove('Tom')
eleves.sort()
print(eleves)

Remarque

Spécificité Python — mutabilité. Une liste est mutable : ses méthodes (append, sort…) modifient l'objet sur place et renvoient None. C'est pour cela que liste = liste.sort() est un piège classique : tu écrases ta liste avec None. Les chaînes et les tuples, eux, sont immutables : impossible de les modifier après création.

Parcourir une liste avec for

Le moyen le plus naturel de visiter chaque élément est la boucle for. Tu connais déjà la syntaxe for i in range(...) ; sache que for sait aussi parcourir directement les éléments d'une liste.


            

Quand tu as besoin à la fois de l'indice et de la valeur, utilise enumerate :


            

L'autre forme classique passe par range(len(...)) : utile quand tu dois modifier la liste pendant le parcours, ou comparer deux listes en parallèle.


            

Complète le programme

Affiche chaque élément de la liste, un par ligne :


        
Voir la solution
prenoms = ['Marie', 'Tom', 'Léa']
for p in prenoms:
    print(p)

Complète le programme

Calcule la somme des éléments de la liste à l'aide d'une boucle for :


        
Voir la solution
valeurs = [3, 7, 2, 8, 5]
total = 0
for v in valeurs:
    total = total + v
print(total)

À toi de jouer

On te donne une liste de notes. Compte combien sont strictement supérieures à 10 et affiche ce nombre.


        
Voir la solution
notes = [8, 12, 15, 6, 14, 11, 9, 18]
nb_bonnes = 0
for note in notes:
    if note > 10:
        nb_bonnes = nb_bonnes + 1
print(nb_bonnes)

Remarque

Spécificité Python — itérer plutôt qu'indexer. En C ou en Java, on parcourt presque toujours par indice : for (int i = 0; i < n; i++). En Python, on parcourt directement les éléments : for x in liste. C'est plus lisible, plus court, et ça marche aussi avec d'autres objets « itérables » (chaînes, fichiers, dictionnaires…). Ne tombe pas dans le piège de for i in range(len(liste)) quand tu n'as pas besoin de l'indice : c'est considéré comme « non-pythonique ».

Découper une liste : le slicing

Le slicing permet d'extraire un morceau de liste avec la syntaxe liste[debut:fin]. La règle d'or : debut est inclus, fin est exclu. Le résultat est toujours une nouvelle liste.


            

Avec un troisième nombre, on saute des éléments. Et la valeur négative -1 inverse la liste !


            

Complète le programme

Extrais les trois premiers éléments de la liste :


        
Voir la solution
lettres = ['a', 'b', 'c', 'd', 'e', 'f']
print(lettres[0:3])

Complète le programme

Renverse la liste avec un slice :


        
Voir la solution
nombres = [10, 20, 30, 40, 50]
print(nombres[::-1])

À toi de jouer

À partir de la liste de 10 valeurs, affiche successivement : la première moitié, la seconde moitié, et la liste à l'envers.


        
Voir la solution
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(data[:5])
print(data[5:])
print(data[::-1])

Remarque

Spécificité Python — le slicing ne plante jamais. Si tu demandes liste[0:1000] sur une liste de 5 éléments, Python te renvoie paisiblement toute la liste, sans erreur. Idem pour liste[10:20] hors-bornes : tu obtiens []. C'est volontairement tolérant — l'inverse exact du comportement strict de l'indexation simple liste[10] qui, elle, lève une IndexError.

Tableaux à deux dimensions : listes de listes

Une liste peut contenir… d'autres listes. C'est ainsi qu'on représente naturellement une grille, un échiquier, une matrice ou un tableau de classe. On accède à un élément avec deux paires de crochets : grille[ligne][colonne].


            

Pour parcourir un tableau 2D, on imbrique deux boucles for : la première sur les lignes, la seconde sur les colonnes.


            

Complète le programme

Affiche la valeur centrale de la grille (ligne 1, colonne 1) :


        
Voir la solution
grille = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(grille[1][1])

Complète le programme

Modifie la case centrale pour qu'elle vaille 0, puis affiche la grille :


        
Voir la solution
grille = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
grille[1][1] = 0
print(grille)

À toi de jouer

Voici les notes de 3 élèves sur 4 contrôles. Calcule et affiche, sur une ligne par élève, la moyenne de chacun.


        
Voir la solution
notes = [
    [12, 15, 8, 17],
    [10, 9, 11, 14],
    [18, 16, 17, 19],
]
for ligne in notes:
    total = 0
    for note in ligne:
        total = total + note
    print(total / len(ligne))

Remarque

Spécificité Python — pas de « vrai » tableau 2D. Contrairement à C ou Java où un int[3][3] est un bloc mémoire rectangulaire, une « liste de listes » Python est une liste qui contient des références vers d'autres listes, indépendantes. Rien n'empêche que les sous-listes aient des longueurs différentes (tableau « en dents de scie »). Pour des matrices numériques performantes, les programmeurs Python utilisent numpy — tu le découvriras dans la fiche sur les courbes.

Pour aller plus loin

Listes en compréhension. Construire une liste à partir d'une autre est si fréquent que Python offre une syntaxe ultra-compacte : [expression for x in iterable]. Compare ces deux versions :


            

À toi de jouer

Avec une liste en compréhension, construis et affiche la liste des cubes des entiers de 1 à 10.


        
Voir la solution
cubes = [n ** 3 for n in range(1, 11)]
print(cubes)

Tuples : les listes immuables. Quand tu veux regrouper des valeurs sans permettre leur modification, on utilise un tuple (parenthèses au lieu de crochets). Très pratique pour renvoyer plusieurs valeurs d'une fonction (chapitre suivant !).


            

Le piège de [[0]*3]*3. L'opérateur * sur une liste duplique la référence, pas l'objet. Pour une liste 1D ça ne se voit pas, mais pour une grille 2D c'est un cauchemar :


            

Comparaison avec C, Java, JavaScript. La liste Python est l'équivalent du ArrayList de Java ou du tableau JavaScript : taille dynamique, types mixtes autorisés. Un tableau C, lui, est figé en taille et homogène. Les listes Python sont donc plus souples — au prix d'un accès légèrement plus lent qu'un tableau bas-niveau, ce qui motive l'usage de numpy dès qu'on fait du calcul scientifique.

Ce que tu as appris

  • Une liste s'écrit [a, b, c] ; on accède aux éléments par leur indice (à partir de 0), et liste[-1] désigne le dernier.
  • append, insert, remove, pop modifient la liste sur place ; sort() trie sur place, sorted(...) renvoie une nouvelle liste.
  • for x in liste parcourt directement les éléments ; enumerate donne aussi l'indice.
  • Le slicing liste[a:b:p] extrait un morceau sans toucher à l'original ; liste[::-1] renverse.
  • Une liste de listes représente un tableau 2D : grille[i][j] et deux boucles for imbriquées pour le parcourir.
  • Hors programme : compréhensions, tuples immuables, piège des références partagées avec *.

Et après…

Tu vas découvrir les fonctions — comment réutiliser un bloc de code en lui donnant un nom, lui passer des paramètres, et récupérer un résultat avec return. La porte d'entrée vers tous les programmes sérieux.