0 XP
?
Débutant40 min25 XP

Objectifs de cette leçon

  • Créer et manipuler des listes
  • Utiliser l'indexation et le slicing
  • Comprendre la différence entre list et tuple

Listes et tuples 📋

Qu'est-ce qu'une liste ? 🤔

Une liste est une collection ordonnee et modifiable d'elements. C'est la structure de donnees la plus utilisee en Python.

fruits = ["pomme", "banane", "cerise"]
nombres = [1, 2, 3, 4, 5]
mixte = [42, "hello", 3.14, True, None]
vide = []

💡 Les listes peuvent contenir n'importe quel type, et tu peux melanger les types.


Acceder aux elements 🔢

Les elements sont acces par leur index (position), qui commence a 0.

fruits = ["pomme", "banane", "cerise", "date", "elderberry"]

print(fruits[0])     # "pomme"     — premier
print(fruits[2])     # "cerise"    — troisieme
print(fruits[-1])    # "elderberry" — dernier
print(fruits[-2])    # "date"      — avant-dernier
Index positif01234
Valeurpommebananecerisedateelderberry
Index negatif-5-4-3-2-1

Decoupage (slicing) ✂️

nombres = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(nombres[2:5])      # [2, 3, 4]
print(nombres[:4])       # [0, 1, 2, 3]
print(nombres[6:])       # [6, 7, 8, 9]
print(nombres[::2])      # [0, 2, 4, 6, 8]
print(nombres[::-1])     # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
SyntaxeSignificationResultat
[2:5]Index 2 a 4[2, 3, 4]
[:3]Debut jusqu'a index 2[0, 1, 2]
[7:]Index 7 a la fin[7, 8, 9]
[::2]Pas de 2[0, 2, 4, 6, 8]
[::-1]Inversee[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

💡 Le slicing cree une nouvelle liste — la liste originale n'est pas modifiee.


Modifier des elements ✏️

fruits = ["pomme", "banane", "cerise"]

# Modifier un element
fruits[1] = "bleuet"
print(fruits)  # ['pomme', 'bleuet', 'cerise']

# Modifier une tranche
fruits[0:2] = ["mangue", "kiwi", "noix de coco"]
print(fruits)  # ['mangue', 'kiwi', 'noix de coco', 'cerise']

Methodes essentielles des listes 🛠️

MethodeDescriptionExemple
.append(x)Ajoute x a la finliste.append(4)
.insert(i, x)Insere x a l'index iliste.insert(0, "debut")
.extend(l)Ajoute tous les elements de lliste.extend([7, 8])
.remove(x)Supprime la premiere occurrenceliste.remove(3)
.pop(i)Retire et retourne l'element a l'index iliste.pop(0)
.pop()Retire et retourne le dernierliste.pop()
.clear()Vide la listeliste.clear()
.index(x)Retourne l'index de xliste.index(5)
.count(x)Compte les occurrencesliste.count(2)
.sort()Trie en placeliste.sort()
.reverse()Inverse en placeliste.reverse()
.copy()Copie superficiellecopie = liste.copy()

Exemples pratiques

courses = ["pain", "lait"]
courses.append("oeufs")            # ['pain', 'lait', 'oeufs']
courses.insert(1, "beurre")       # ['pain', 'beurre', 'lait', 'oeufs']
courses.extend(["jus", "fromage"]) # ['pain', 'beurre', 'lait', 'oeufs', 'jus', 'fromage']

dernier = courses.pop()           # Retire "fromage"
print(courses)                     # ['pain', 'beurre', 'lait', 'oeufs', 'jus']

courses.remove("lait")
print(courses)                     # ['pain', 'beurre', 'oeufs', 'jus']

in et len() 🔍

fruits = ["pomme", "banane", "cerise"]

print("pomme" in fruits)    # True
print("mangue" in fruits)   # False
print("mangue" not in fruits)  # True
print(len(fruits))          # 3

Tri et inversion 🔄

nombres = [3, 1, 4, 1, 5, 9, 2, 6]

nombres.sort()
print(nombres)  # [1, 1, 2, 3, 4, 5, 6, 9]

nombres.sort(reverse=True)
print(nombres)  # [9, 6, 5, 4, 3, 2, 1, 1]

# sorted() retourne une NOUVELLE liste
original = [3, 1, 4, 1, 5]
triee = sorted(original)
print(original)  # [3, 1, 4, 1, 5] — intact !
print(triee)     # [1, 1, 3, 4, 5]

Comprehensions de listes ✨

# Syntaxe : [expression for variable in iterable if condition]

carres = [x**2 for x in range(10)]
print(carres)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

pairs = [x for x in range(20) if x % 2 == 0]
print(pairs)  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

mots = ["hello", "world", "python"]
majuscules = [m.upper() for m in mots]
print(majuscules)  # ['HELLO', 'WORLD', 'PYTHON']

etudiants = [
    {"nom": "Alice", "note": 15},
    {"nom": "Bob", "note": 8},
    {"nom": "Charlie", "note": 18},
]
admis = [e["nom"] for e in etudiants if e["note"] >= 10]
print(admis)  # ['Alice', 'Charlie']

Comprehensions imbriquees

matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
aplati = [x for ligne in matrice for x in ligne]
print(aplati)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

Les tuples — listes immuables 🔒

# Creation
coordonnees = (10, 20)
couleurs = ("rouge", "vert", "bleu")
singleton = (42,)  # La virgule est obligatoire pour un tuple a 1 element

# Acces
print(coordonnees[0])  # 10
print(couleurs[-1])    # "bleu"

# Tuples immuables
# coordonnees[0] = 15  # TypeError

Pourquoi utiliser un tuple ?

# 1. Coordonnees (x, y)
point = (3, 4)

# 2. Retourner plusieurs valeurs
def min_max(liste):
    return min(liste), max(liste)

minimum, maximum = min_max([1, 5, 3, 9, 2])
print(f"Min: {minimum}, Max: {maximum}")  # Min: 1, Max: 9

# 3. Les tuples sont plus rapides que les listes
# 4. Les tuples peuvent etre utilises comme cles de dictionnaire

Deballage (unpacking) 📦

# Deballage de liste
a, b, c = [1, 2, 3]
print(a, b, c)  # 1 2 3

# Deballage avec le * (star)
premier, *milieu, dernier = [1, 2, 3, 4, 5]
print(premier)    # 1
print(milieu)     # [2, 3, 4]
print(dernier)    # 5

# Echange de variables (swap)
x, y = 10, 20
x, y = y, x
print(x, y)       # 20 10

# Ignorer des valeurs avec _
nom, _, age = ("Alice", "inutile", 25)
print(f"{nom} a {age} ans")

Comparaison liste vs tuple

CaracteristiqueListe []Tuple ()
Modifiable✅ Oui❌ Non
Syntaxe[1, 2, 3](1, 2, 3)
PerformancePlus lentPlus rapide
Cle de dict❌ Non✅ Oui
UtilisationDonnees qui changentDonnees fixes

Memoire : comment Python gere les listes 🧠

💡 Les variables contiennent une reference (une fleche) vers la liste stockee dans la memoire.


Pieges courants ⚠️

# 1. Copie superficielle vs profonde
original = [[1, 2], [3, 4]]
copie = original.copy()      # Copie superficielle
copie[0][0] = 99
print(original)  # [[99, 2], [3, 4]] — L'original est modifie !

# Solution : copie profonde
import copy
copie = copy.deepcopy(original)

# 2. Comparaison de listes
print([1, 2, 3] == [1, 2, 3])    # True
print([1, 2, 3] == [3, 2, 1])    # False (l'ordre compte)

Exercice pour toi 🎯

# Exercice 1 : Retirer les doublons (en gardant l'ordre)
def retirer_doublons(liste):
    resultat = []
    for element in liste:
        if element not in resultat:
            resultat.append(element)
    return resultat

print(retirer_doublons([1, 2, 2, 3, 1, 4]))  # [1, 2, 3, 4]

# Exercice 2 : Pairs et impairs
nombres = list(range(1, 21))
pairs = [x for x in nombres if x % 2 == 0]
impairs = [x for x in nombres if x % 2 != 0]

# Exercice 3 : Rotation d'une liste
def rotation_gauche(liste, k):
    k = k % len(liste)
    return liste[k:] + liste[:k]

print(rotation_gauche([1, 2, 3, 4, 5], 2))  # [3, 4, 5, 1, 2]

# Exercice 4 : Matrice transposee
def transposer(matrice):
    return [[ligne[i] for ligne in matrice] for i in range(len(matrice[0]))]

matrice = [[1, 2, 3], [4, 5, 6]]
print(transposer(matrice))  # [[1, 4], [2, 5], [3, 6]]

💡 Astuce : Les listes sont partout en Python. Maitrise-les et tu pourras resoudre 80% des problemes !

⚡ Simulateur — Listes et tuples

Étape 1/9
📝 Pseudo-code
1fruits = ["pomme", "banane", "cerise"]
2print(fruits[0])
3fruits.append("datte")
4print(len(fruits))
5for fruit in fruits:
6 print(fruit)
⚙️ Exécution
📦 Mémoire
fruits
["pomme", "banane", "cerise"]
🔀 Flux d'exécution
liste créée
3
Création de liste

On crée une liste de 3 fruits avec des crochets. Les listes sont ordonnées, mutables, et peuvent contenir des doublons.