TP 2 : Tuples et Listes

BIU IA - Python

29 Janvier 2026

Nous avons découvert la semaine dernière les types de bases de Python : les entiers, les flottants, les chaînes de caractères et les Booléens. Python se distingue d’autres langages de programmation en proposant des structures de données plus complexes sans avoir à recourir à des librairies spécialisées. Dans ce TP, nous allons nous concentrer sur deux de ces types : les listes et les tuples.

Les bases

Ces structures de données permettent de représenter plusieur valeurs d’un coup. On écrit les listes entre [ et ] en séparant les éléments par des virgules. On écrit des tuples entre ( et ) en séparant les éléments par des virgules. Par exemple :

La différence principale entre ces deux structures est qu’un tuple a un nombre fixé d’éléments alors qu’une liste peut changer de taille au cours du programme.

Si techniquement Python accepte qu’on mélange les types dans une liste, cela est considéré comme une mauvaise pratique puisqu’il est difficile de traiter une liste dont on ne connaît pas le type des éléments. On privilégiera un tuple dans ce cas-là, en respectant le type à chaque position : par exemple un tuple (int,str) a son premier élément entier et son second est une chaîne de caractère.

On peut combiner ces structures et les stocker dans des variables :

soupe = [(3, "carotte"), (2, "poireau"), (4, "pomme de terre"), (1, "oignon")]
morpion = [ [".", "x", "o"], [".", "o", "x"], ["o", "x", "o"]

On va découvrir comment manipuler les éléments d’une liste.

  1. Écrivez un programme où vous définissez une liste l = [3,5,7,9].
  2. Affichez l[1], l[0] et l[3] dans la console.
  3. Affichez l[4] : que remarquez-vous ?
  4. Affichez l[-1].
  5. Changer la deuxième valeur de la liste avec l[1] = 6 et affichez toute la liste avec print(l).
    1. Sans l’exécuter, essayez de devnir ce qu’affiche le programme suivant :
l = [1,2,3]
q = l
l[0] = -1
print(q)

x = 5
y = x
x = 4
print(y)
    1. Aviez-vous raison ? Comment pourrait-on expliquer cela ?

Les éléments d’une listes avec n éléments (et des tuples) sont numérotés de 0 à n − 1 et on peut accéder au ième élément d’une liste en ajoutant [i] après le nom de la liste (ou la liste elle-même, par exemple [1,2,3][2] vaut 3). Si l’on essaie de lire une valeur en dehors de ces index, on aura une erreur IndexError: list index out of range. On peut aussi accéder à des index négatifs entre −1 (dernier élément) et n (premier élément).

Dans un programme, on a souvent besoin de savoir combien il y a d’éléments dans une liste, par exemple, pour éviter de lire un index invalide. On utilisera pour cela la fonction len(l). Par exemple len([1,2,3,4,5]) vaut 5.

Six amis veulent décider aléatoirement qui va faire la vaisselle. Ils n’ont pas de dé avec eux pour le lancer et sont trop vieux pour ploumer, mais heureusement, ils ont un interpréteur Python sur leur téléphone. Ils veulent s’en servir pour savoir qui aura la chance de laver les assiettes.

On peut choisir un nombre aléatoire entre deux bornes a et b en Python avec la fonction random.randint(a,b) (pensez à charger la librairie random avec import random au début du code).

  1. Définissez une liste prenom contenant 6 prénoms différents et écrire un programme qui affiche un prénom aléatoire dans votre liste. Testez en exécutant le programme plusieurs fois.
  2. Si ce n’est pas déjà le cas, faire en sorte que si quelqu’un ajoute ou enlève des noms dans prenom, votre programme fonctionne toujours sans autre changement. On devra automatiquement tirer un nombre aléatoire entre 0 et la longueur de la liste.

Manipuler des listes

Une des opérations les plus importantes dans les listes est la fonction append. Elle permet d’ajouter une valeur à la fin d’une liste. Ainsi :

l = ["Alice", "Bob", "Carol"]
l.append("David")
print(l)

affichera ["Alice", "Bob", "Carol", "David"]. On peut aussi concaténer des listes avec + :

l = ["Alice", "Bob", "Carol"]
q = ["David", "Emilie"]
print(l+q)

affichera ["Alice", "Bob", "Carol", "David", "Emilie"].

De nombreuses fonctions permettent de manipuler les listes. Ainsi si l=["a","a","b","c","d", "b"] :

Toutes ces fonctions marchent aussi sur les chaînes de caractères ! Ainsi "Alice"[3] est la lettre “c”. La raison est qu’une chaîne de caractères peut être vue comme une liste de lettres. Ce n’est pas tout à fait comme cela qu’elles sont implémentées en Python (même si c’est la façon historique de le faire) mais elles partagent tout de même de nombreuses propriétés permettant de les traiter de façon assez indifférencier.

Un meurtre a été commis dans le salon Anglais. Vous utilisez SherlockGPT pour vous aider à résoudre cette mystérieuse affaire. Cependant, à cause des restrictions énergétiques, votre IA vous conseille de mettre un col roulé et de finir l’enquête vous-même. Elle vous laisse un fichier suspect.py avec les instructions suivantes :

J’ai réduit la liste des suspects suspect 100000 personnes. Je sais que le meurtrier est le seul de cette liste qui ne s’appelle pas Alice ni Bob et que son nom ne commence pas par “A” ni par “B”. J’ai aussi généré une liste armes. Je sais que si le meurtrier est en position i dans la liste suspect alors il a utilisé l’arme qui est à la position i dans la liste.

On pourra charger les listes générées par SherlockGPT as la commande suivante :

from suspect import *

print(suspect)
print(armes)

Retrouvez le meutrier et l’arme du crime !