Cours Python - Listes et Structures de Données
Listes et Structures de Données en Python
Introduction aux Listes
Les listes sont des structures de données fondamentales en Python qui permettent de stocker des collections ordonnées et modifiables d'éléments.
Création de Listes
Syntaxe de base :
ma_liste = [élément1, élément2, élément3, ...]
Exemples de création :
# Liste de nombres
nombres = [1, 2, 3, 4, 5]
# Liste de chaînes
fruits = ["pomme", "banane", "orange"]
# Liste mixte
mixte = [1, "hello", 3.14, True]
# Liste vide
vide = []
# Liste avec list()
autre_liste = list(range(5)) # [0, 1, 2, 3, 4]
Accès aux Éléments
Indexation positive et négative :
fruits = ["pomme", "banane", "orange", "kiwi", "mangue"]
print(fruits[0]) # premier élément: "pomme"
print(fruits[2]) # troisième élément: "orange"
print(fruits[-1]) # dernier élément: "mangue"
print(fruits[-2]) # avant-dernier: "kiwi"
Slicing (tranches) :
fruits = ["pomme", "banane", "orange", "kiwi", "mangue"]
print(fruits[1:3]) # éléments 1 à 2: ["banane", "orange"]
print(fruits[:3]) # du début à l'index 2: ["pomme", "banane", "orange"]
print(fruits[2:]) # de l'index 2 à la fin: ["orange", "kiwi", "mangue"]
print(fruits[::2]) # un élément sur deux: ["pomme", "orange", "mangue"]
print(fruits[::-1]) # liste inversée: ["mangue", "kiwi", "orange", "banane", "pomme"]
Modification des Listes
Modification d'éléments :
fruits = ["pomme", "banane", "orange"]
fruits[1] = "kiwi"
print(fruits) # ["pomme", "kiwi", "orange"]
# Modification avec slicing
fruits[0:2] = ["cerise", "pêche"]
print(fruits) # ["cerise", "pêche", "orange"]
Ajout d'éléments :
fruits = ["pomme", "banane"]
# append() - ajoute à la fin
fruits.append("orange")
print(fruits) # ["pomme", "banane", "orange"]
# insert() - insère à une position spécifique
fruits.insert(1, "kiwi")
print(fruits) # ["pomme", "kiwi", "banane", "orange"]
# extend() - ajoute plusieurs éléments
fruits.extend(["cerise", "pêche"])
print(fruits) # ["pomme", "kiwi", "banane", "orange", "cerise", "pêche"]
Suppression d'éléments :
fruits = ["pomme", "kiwi", "banane", "orange", "kiwi"]
# remove() - supprime la première occurrence
fruits.remove("kiwi")
print(fruits) # ["pomme", "banane", "orange", "kiwi"]
# pop() - supprime et retourne l'élément à l'index
element = fruits.pop(1)
print(element) # "banane"
print(fruits) # ["pomme", "orange", "kiwi"]
# del - supprime par index
del fruits[0]
print(fruits) # ["orange", "kiwi"]
# clear() - vide la liste
fruits.clear()
print(fruits) # []
Méthodes Utiles des Listes
Méthode |
Description |
Exemple |
len() |
Longueur de la liste |
len([1,2,3]) → 3 |
index() |
Index d'un élément |
["a","b","c"].index("b") → 1 |
count() |
Nombre d'occurrences |
[1,2,2,3].count(2) → 2 |
sort() |
Trie la liste |
[3,1,2].sort() → [1,2,3] |
reverse() |
Inverse la liste |
[1,2,3].reverse() → [3,2,1] |
copy() |
Copie la liste |
[1,2].copy() → [1,2] |
nombres = [3, 1, 4, 1, 5, 9, 2, 6]
print(len(nombres)) # 8
print(nombres.index(5)) # 4
print(nombres.count(1)) # 2
nombres.sort()
print(nombres) # [1, 1, 2, 3, 4, 5, 6, 9]
nombres.reverse()
print(nombres) # [9, 6, 5, 4, 3, 2, 1, 1]
Opérations sur les Listes
Concaténation :
liste1 = [1, 2, 3]
liste2 = [4, 5, 6]
liste3 = liste1 + liste2
print(liste3) # [1, 2, 3, 4, 5, 6]
Répétition :
liste = [1, 2]
liste_repetee = liste * 3
print(liste_repetee) # [1, 2, 1, 2, 1, 2]
Vérification d'appartenance :
fruits = ["pomme", "banane", "orange"]
print("pomme" in fruits) # True
print("kiwi" not in fruits) # True
Listes Imbriquées (Listes 2D)
# Matrice 3x3
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrice[0]) # [1, 2, 3]
print(matrice[1][2]) # 6
# Parcourir une matrice
for ligne in matrice:
for element in ligne:
print(element, end=" ")
print() # nouvelle ligne
# Sortie :
# 1 2 3
# 4 5 6
# 7 8 9
Compréhensions de Listes
Une manière concise de créer des listes basées sur des séquences existantes.
# Créer une liste des carrés de 0 à 9
carres = [x**2 for x in range(10)]
print(carres) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Nombres pairs de 0 à 20
pairs = [x for x in range(21) if x % 2 == 0]
print(pairs) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# Mettre en majuscules
mots = ["hello", "world", "python"]
majuscules = [mot.upper() for mot in mots]
print(majuscules) # ["HELLO", "WORLD", "PYTHON"]
Tuples
Les tuples sont comme des listes mais immuables (non modifiables).
# Création de tuples
mon_tuple = (1, 2, 3)
autre_tuple = 4, 5, 6 # parenthèses optionnelles
tuple_vide = ()
tuple_un_element = (1,) # notez la virgule
# Accès aux éléments
print(mon_tuple[0]) # 1
print(mon_tuple[1:]) # (2, 3)
# Les tuples sont immuables
# mon_tuple[0] = 10 # Erreur !
Exemples Pratiques Complets
Exemple 1 : Gestion des Notes
# Système de gestion de notes
notes = []
# Ajouter des notes
notes.extend([85, 92, 78, 90, 65])
# Calculer la moyenne
moyenne = sum(notes) / len(notes)
print(f"Moyenne : {moyenne:.2f}")
# Trouver la note maximale et minimale
print(f"Meilleure note : {max(notes)}")
print(f"Pire note : {min(notes)}")
# Notes au-dessus de la moyenne
notes_sup = [note for note in notes if note > moyenne]
print(f"Notes au-dessus de la moyenne : {notes_sup}")
Exemple 2 : Inventaire de Produits
# Système d'inventaire
produits = ["pomme", "banane", "orange", "kiwi"]
prix = [1.20, 0.80, 1.50, 2.00]
stock = [50, 75, 30, 25]
# Afficher l'inventaire
print("INVENTAIRE :")
for i in range(len(produits)):
print(f"{produits[i]} - {prix[i]}€ - Stock: {stock[i]}")
# Valeur totale de l'inventaire
valeur_totale = sum(prix[i] * stock[i] for i in range(len(produits)))
print(f"\nValeur totale de l'inventaire : {valeur_totale:.2f}€")
Exemple 3 : Statistiques sur une Liste
# Analyse statistique
donnees = [23, 45, 67, 23, 89, 45, 23, 67, 34, 12]
# Fréquence des valeurs
frequence = {}
for valeur in donnees:
frequence[valeur] = frequence.get(valeur, 0) + 1
print("Fréquence des valeurs :")
for valeur, count in frequence.items():
print(f"{valeur} : {count} occurrence(s)")
# Valeurs uniques
valeurs_uniques = list(set(donnees))
print(f"\nValeurs uniques : {sorted(valeurs_uniques)}")
Exercices Pratiques
Exercice 1 : Palindrome
# Vérifier si un mot est un palindrome
mot = "radar"
est_palindrome = mot == mot[::-1]
print(f"'{mot}' est un palindrome : {est_palindrome}")
Exercice 2 : Fusion de Listes Triées
# Fusionner deux listes triées
liste1 = [1, 3, 5, 7]
liste2 = [2, 4, 6, 8]
liste_fusionnee = []
i = j = 0
while i < len(liste1) and j < len(liste2):
if liste1[i] < liste2[j]:
liste_fusionnee.append(liste1[i])
i += 1
else:
liste_fusionnee.append(liste2[j])
j += 1
# Ajouter les éléments restants
liste_fusionnee.extend(liste1[i:])
liste_fusionnee.extend(liste2[j:])
print(f"Liste fusionnée : {liste_fusionnee}")
Exercice 3 : Matrice Transposée
# Transposer une matrice
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Méthode avec compréhension de liste
transposee = [[ligne[i] for ligne in matrice] for i in range(len(matrice[0]))]
print("Matrice originale :")
for ligne in matrice:
print(ligne)
print("\nMatrice transposée :")
for ligne in transposee:
print(ligne)
Bonnes Pratiques
- Utilisez les compréhensions de listes pour des opérations simples et claires
- Préférez
append()
pour ajouter des éléments un par un
- Utilisez
extend()
pour ajouter plusieurs éléments
- Les tuples sont plus rapides que les listes et protègent contre les modifications accidentelles
- Utilisez
copy()
pour créer une copie indépendante d'une liste
Attention : L'affectation liste2 = liste1
ne crée pas une copie, mais une référence vers la même liste. Utilisez liste2 = liste1.copy()
pour une vraie copie.
Astuce : Utilisez enumerate()
pour obtenir à la fois l'index et la valeur lors du parcours d'une liste : for index, valeur in enumerate(ma_liste):
Résumé
- Les listes sont modifiables, ordonnées et peuvent contenir différents types
- Les tuples sont immuables et plus efficaces
- L'indexation et le slicing permettent d'accéder aux éléments
- Les méthodes comme append(), remove(), sort() facilitent la manipulation
- Les compréhensions de listes offrent une syntaxe concise
- Les listes imbriquées permettent de créer des structures 2D