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 positif | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| Valeur | pomme | banane | cerise | date | elderberry |
| 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]
| Syntaxe | Signification | Resultat |
|---|---|---|
[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 🛠️
| Methode | Description | Exemple |
|---|---|---|
.append(x) | Ajoute x a la fin | liste.append(4) |
.insert(i, x) | Insere x a l'index i | liste.insert(0, "debut") |
.extend(l) | Ajoute tous les elements de l | liste.extend([7, 8]) |
.remove(x) | Supprime la premiere occurrence | liste.remove(3) |
.pop(i) | Retire et retourne l'element a l'index i | liste.pop(0) |
.pop() | Retire et retourne le dernier | liste.pop() |
.clear() | Vide la liste | liste.clear() |
.index(x) | Retourne l'index de x | liste.index(5) |
.count(x) | Compte les occurrences | liste.count(2) |
.sort() | Trie en place | liste.sort() |
.reverse() | Inverse en place | liste.reverse() |
.copy() | Copie superficielle | copie = 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
| Caracteristique | Liste [] | Tuple () |
|---|---|---|
| Modifiable | ✅ Oui | ❌ Non |
| Syntaxe | [1, 2, 3] | (1, 2, 3) |
| Performance | Plus lent | Plus rapide |
| Cle de dict | ❌ Non | ✅ Oui |
| Utilisation | Donnees qui changent | Donnees 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.