Listes et Structures de Données
Listes et Structures de Données
Section titled “Listes et Structures de Données”Pourquoi c’est important ?
Section titled “Pourquoi c’est important ?”Les structures de données sont comme des conteneurs pour organiser l’information. Sans elles, vous ne pourriez stocker qu’une seule valeur à la fois. Avec elles, vous pouvez gérer des milliers, voire des millions de données efficacement.
Exemples concrets d’utilisation :
- Sites web : Stocker tous les utilisateurs, produits, commandes
- Applications mobiles : Gérer les contacts, messages, notifications
- Data Science : Analyser des millions de données
- Jeux vidéo : Gérer les inventaires, scores, joueurs
- DevOps : Lister les serveurs, logs, configurations
Choisir la bonne structure, c’est comme choisir le bon outil : un tournevis pour une vis, un marteau pour un clou. Chaque structure a son usage optimal.
Les listes : collections modifiables
Section titled “Les listes : collections modifiables”Une liste est une collection ordonnée d’éléments que vous pouvez modifier à tout moment. C’est la structure la plus utilisée en Python.
Créer une liste
Section titled “Créer une liste”ma_liste = [] # Liste vide
# Listes avec des élémentsfruits = ["pomme", "orange", "mangue"]nombres = [1, 2, 3, 4, 5]mixte = ["hello", 40, True, 3.14] # Peut mélanger les typesSyntaxe : Utilisez les crochets [] et séparez les éléments par des virgules
Exemple réel : Liste de tâches
taches = ["Faire les courses", "Répondre aux emails", "Appeler le client"]print(f"Vous avez {len(taches)} tâches aujourd'hui")Exemple réel : E-commerce
panier = ["Laptop", "Souris", "Clavier", "Écran"]print(f"Articles dans le panier : {len(panier)}")Utilisé dans :
- Gestion de collections d’objets
- Stockage temporaire de données
- Files d’attente de tâches
- Historiques d’actions
- Résultats de recherche
Accéder aux éléments
Section titled “Accéder aux éléments”fruits = ["pomme", "orange", "mangue"]
# Par index (commence à 0)print(fruits[0]) # "pomme"print(fruits[1]) # "orange"print(fruits[-1]) # "mangue" (dernier élément)print(fruits[-2]) # "orange" (avant-dernier)Important : En Python, on compte à partir de 0 !
Les index négatifs comptent depuis la fin : -1 = dernier, -2 = avant-dernier.
Exemple réel : Playlist musicale
playlist = ["Song1.mp3", "Song2.mp3", "Song3.mp3", "Song4.mp3"]
premiere_chanson = playlist[0]derniere_chanson = playlist[-1]
print(f"Maintenant : {premiere_chanson}")print(f"Prochaine : {playlist[1]}")Exemple réel : Classement sportif
classement = ["Équipe A", "Équipe B", "Équipe C", "Équipe D"]
premier = classement[0]dernier = classement[-1]
print(f"🥇 Leader : {premier}")print(f"❌ Dernier : {dernier}")Utilisé dans :
- Lecteurs multimédias
- Systèmes de classement
- Navigation dans des résultats
- Affichage de données paginées
Modifier une liste
Section titled “Modifier une liste”Les listes sont mutables : vous pouvez les changer après leur création.
Changer un élément :
fruits[1] = "avocat"print(fruits) # ["pomme", "avocat", "mangue"]Ajouter un élément :
fruits.append("kiwi")print(fruits) # ["pomme", "avocat", "mangue", "kiwi"]Supprimer un élément :
fruits.remove("avocat")print(fruits) # ["pomme", "mangue", "kiwi"]Exemple réel : Application de notes
notes = []
# Ajouter des notesnotes.append("Acheter du lait")notes.append("Rendez-vous médecin 15h")notes.append("Appeler Marie")
print(f"Notes : {notes}")
# Supprimer une note terminéenotes.remove("Acheter du lait")print(f"Notes restantes : {notes}")Exemple réel : Système de notifications
notifications = ["Message de Paul", "Email reçu"]
# Nouvelle notificationnotifications.append("Mise à jour disponible")
# L'utilisateur lit la premièrenotifications.remove("Message de Paul")
print(f"Notifications actives : {len(notifications)}")Exemple réel : Gestion de stock
stock = ["Pommes", "Bananes", "Oranges"]
# Arrivagestock.append("Mangues")stock.append("Kiwis")
# Produit vendustock.remove("Pommes")
print(f"Stock actuel : {stock}")Utilisé dans :
- Systèmes de notifications
- Gestion de paniers d’achat
- Todo lists et gestionnaires de tâches
- Inventaires et stocks
- Files d’attente (queues)
Méthodes utiles des listes
Section titled “Méthodes utiles des listes”| Méthode | Action | Exemple | Usage réel |
|---|---|---|---|
append(x) | Ajoute à la fin | liste.append(5) | Ajouter un produit au panier |
remove(x) | Supprime l’élément x | liste.remove("pomme") | Retirer un article |
insert(i, x) | Insère à la position i | liste.insert(0, "urgent") | Priorité haute |
pop() | Retire le dernier | liste.pop() | File d’attente LIFO |
len(liste) | Nombre d’éléments | len(fruits) | Compter les items |
sort() | Trie la liste | nombres.sort() | Classement |
reverse() | Inverse l’ordre | liste.reverse() | Ordre décroissant |
clear() | Vide la liste | liste.clear() | Reset |
Exemple réel : Système de priorités
taches = ["Tâche normale", "Autre tâche"]
# Ajouter une tâche urgente en premiertaches.insert(0, "URGENT : Bug critique")
print(taches)# ["URGENT : Bug critique", "Tâche normale", "Autre tâche"]Exemple réel : Tri de scores
scores = [85, 92, 78, 95, 88]scores.sort(reverse=True) # Ordre décroissant
print("🏆 Classement :")for i, score in enumerate(scores, 1): print(f"{i}. Score: {score}")Utilisé dans :
- Gestion de priorités
- Systèmes de classement
- Tri de résultats
- Manipulation de données
Les tuples : collections non modifiables
Section titled “Les tuples : collections non modifiables”Un tuple est comme une liste, mais immuable : une fois créé, il ne peut plus être modifié. Cette garantie d’immutabilité est très utile pour des données qui ne doivent jamais changer.
Créer un tuple
Section titled “Créer un tuple”tuple_vide = ()
coordonnees = (10, 20)couleurs = ("rouge", "vert", "bleu")
# Tuple avec un seul élément (notez la virgule !)singleton = (42,)Syntaxe : Utilisez les parenthèses ()
Important : Pour un tuple d’un élément, la virgule est obligatoire !
Exemple réel : Coordonnées GPS
paris = (48.8566, 2.3522)new_york = (40.7128, -74.0060)
latitude, longitude = parisprint(f"Paris : {latitude}°N, {longitude}°E")Exemple réel : Configuration système
# Ces valeurs ne doivent JAMAIS changerDATABASE_CONFIG = ("localhost", 5432, "postgres")API_VERSION = (1, 0, 0)
host, port, db_name = DATABASE_CONFIGprint(f"Connexion à {host}:{port}/{db_name}")Exemple réel : Codes de couleur RGB
rouge = (255, 0, 0)vert = (0, 255, 0)bleu = (0, 0, 255)
r, g, b = rougeprint(f"Couleur RGB({r}, {g}, {b})")Utilisé dans :
- Coordonnées géographiques
- Configurations immuables
- Clés de dictionnaires (les listes ne peuvent pas être clés)
- Retour de plusieurs valeurs par une fonction
- Données qui ne doivent jamais être modifiées
Déballage de variables
Section titled “Déballage de variables”Les tuples permettent d’assigner plusieurs variables en une seule ligne.
point = (10, 20)x, y = pointprint(f"x = {x}, y = {y}") # x = 10, y = 20Échanger deux variables :
a = 8b = 10
a, b = b, a # Échange en une ligne !print(f"a = {a}, b = {b}") # a = 10, b = 8Exemple réel : Fonction avec plusieurs retours
def calculer_stats(nombres): total = sum(nombres) moyenne = total / len(nombres) maximum = max(nombres) return total, moyenne, maximum # Retourne un tuple
notes = [15, 18, 12, 16]somme, moy, note_max = calculer_stats(notes)
print(f"Somme: {somme}, Moyenne: {moy}, Max: {note_max}")Exemple réel : Division avec reste
def diviser(a, b): quotient = a // b reste = a % b return quotient, reste
q, r = diviser(17, 5)print(f"17 ÷ 5 = {q} reste {r}")Utilisé dans :
- Fonctions retournant plusieurs valeurs
- Échange de variables
- Parsing de données structurées
- Itération sur plusieurs listes en parallèle
Quand utiliser tuple vs liste ?
Section titled “Quand utiliser tuple vs liste ?”| Critère | Liste | Tuple |
|---|---|---|
| Modification | Oui | Non |
| Performance | Plus lent | Plus rapide |
| Usage | Données changeantes | Données fixes |
| Exemples | Panier d’achat | Coordonnées GPS |
| Liste de tâches | Configuration | |
| Historique | Dimensions d’image |
Règle simple :
- Si les données peuvent changer → Liste
- Si les données sont fixes → Tuple
Les dictionnaires : paires clé-valeur
Section titled “Les dictionnaires : paires clé-valeur”Un dictionnaire stocke des données sous forme de paires clé-valeur. C’est comme un annuaire téléphonique : chaque nom (clé) est associé à un numéro (valeur).
Créer un dictionnaire
Section titled “Créer un dictionnaire”dict_vide = {}
personne = { "nom": "ODJOUADE", "prenom": "Riyad", "age": 21, "ville": "porto"}Syntaxe : {cle: valeur, cle: valeur}
Exemple réel : Profil utilisateur
utilisateur = { "id": 12345, "username": "riyad", "email": "riyad@example.com", "role": "admin", "actif": True}
print(f"Bienvenue {utilisateur['username']}")Exemple réel : Catalogue de produits
produit = { "nom": "Laptop Dell XPS", "prix": 1299.99, "stock": 15, "categorie": "Informatique", "note": 4.5}
print(f"{produit['nom']} - {produit['prix']}€")Exemple réel : Configuration d’application
config = { "debug": True, "port": 8080, "database": "postgresql", "max_connections": 100, "timeout": 30}
if config["debug"]: print("Mode debug activé")Utilisé dans :
- Bases de données (représenter des enregistrements)
- APIs (format JSON)
- Configuration d’applications
- Profils utilisateurs
- Caches et stockage clé-valeur
Accéder aux valeurs
Section titled “Accéder aux valeurs”Méthode directe :
personne = {"nom": "ODJOUADE", "prenom": "Riyad", "age": 21}
print(personne["nom"]) # "ODJOUADE"Méthode get() (plus sûre) :
print(personne.get("age")) # 21print(personne.get("email", "Non défini")) # "Non défini" (car n'existe pas)Différence importante :
personne["email"]→ Erreur si la clé n’existe paspersonne.get("email")→ Retourne None sans erreurpersonne.get("email", "défaut")→ Retourne “défaut” si absent
Exemple réel : API avec données manquantes
reponse_api = { "status": "success", "data": {"username": "alice"} # "email" est absent}
# Mauvais (risque d'erreur)# email = reponse_api["email"] # ❌ KeyError
# Bon (gestion sécurisée)email = reponse_api.get("email", "non fourni")print(f"Email : {email}") # "non fourni"Utilisé dans :
- Traitement de données JSON
- Gestion d’APIs externes
- Formulaires web avec champs optionnels
- Configuration avec valeurs par défaut
Modifier un dictionnaire
Section titled “Modifier un dictionnaire”Ajouter ou modifier :
personne["email"] = "riyad@example.com"personne["age"] = 22Supprimer :
del personne["ville"]Exemple réel : Panier d’achat
panier = { "laptop": 1, "souris": 2, "clavier": 1}
# Ajouter un produitpanier["écran"] = 1
# Modifier une quantitépanier["souris"] = 3
# Retirer un produitdel panier["clavier"]
print(f"Panier : {panier}")Exemple réel : Compteur de mots
texte = "python est génial python est simple"compteur = {}
for mot in texte.split(): if mot in compteur: compteur[mot] += 1 else: compteur[mot] = 1
print(compteur)# {"python": 2, "est": 2, "génial": 1, "simple": 1}Exemple réel : Cache de résultats
cache = {}
def calculer_avec_cache(n): if n in cache: print(f"Résultat en cache pour {n}") return cache[n]
print(f"Calcul de {n}...") resultat = n * n cache[n] = resultat return resultat
print(calculer_avec_cache(5)) # Calculprint(calculer_avec_cache(5)) # CacheUtilisé dans :
- Paniers d’achat
- Systèmes de cache
- Compteurs et statistiques
- Mise à jour de profils
- Gestion d’états
Parcourir un dictionnaire
Section titled “Parcourir un dictionnaire”for cle, valeur in personne.items(): print(f"{cle}: {valeur}")Exemple réel : Affichage de configuration
settings = { "theme": "dark", "langue": "fr", "notifications": True}
print("Paramètres actuels :")for param, valeur in settings.items(): print(f" {param}: {valeur}")Exemple réel : Rapport de stock
stock = { "Pommes": 50, "Bananes": 30, "Oranges": 20}
print("État du stock :")for produit, quantite in stock.items(): statut = "OK" if quantite > 10 else "⚠️ Faible" print(f" {produit}: {quantite} ({statut})")Utilisé dans :
- Affichage de rapports
- Génération de formulaires
- Export de données
- Logs et debugging
Résumé des structures
Section titled “Résumé des structures”| Structure | Symboles | Modifiable | Ordonné | Usage principal |
|---|---|---|---|---|
| Liste | [] | Oui | Oui | Collections similaires |
| Tuple | () | Non | Oui | Données fixes |
| Dictionnaire | {} | Oui | Non* | Associations clé-valeur |
*Depuis Python 3.7, l’ordre d’insertion est préservé.
Cas d’usage professionnels
Section titled “Cas d’usage professionnels”Web Development
Section titled “Web Development”# Utilisateur connectéuser = { "id": 1, "nom": "Alice", "permissions": ["read", "write", "delete"]}
if "delete" in user["permissions"]: afficher_bouton_supprimer()Data Science
Section titled “Data Science”# Analyse de donnéesdonnees = [23, 45, 12, 67, 34, 89, 56]
stats = { "min": min(donnees), "max": max(donnees), "moyenne": sum(donnees) / len(donnees), "total": sum(donnees)}
print(f"Statistiques : {stats}")DevOps
Section titled “DevOps”# État des serveursserveurs = [ {"nom": "web1", "cpu": 45, "ram": 60}, {"nom": "web2", "cpu": 78, "ram": 85}, {"nom": "db1", "cpu": 92, "ram": 95}]
for serveur in serveurs: if serveur["cpu"] > 80 or serveur["ram"] > 80: print(f"⚠️ {serveur['nom']} : Ressources élevées")📋 Évaluation des connaissances
Section titled “📋 Évaluation des connaissances”Objectif de cette évaluation
Section titled “Objectif de cette évaluation”Cette évaluation rapide va vous permettre de vérifier votre maîtrise des listes, tuples et dictionnaires en Python.
🕒 Durée de l’évaluation : 3 minutes
🎯 Niveau de réussite requis : 80% de bonnes réponses
💡 Des explications détaillées vous seront fournies à l’issue de l’évaluation pour consolider vos acquis.
Prêt à tester vos connaissances ? 🚀
📝 Exercices pratiques
Section titled “📝 Exercices pratiques”Exercice 1 : Présentation personnelle
Énoncé : Créez des variables pour votre nom, âge et ville, puis utilisez une f-string pour créer une phrase de présentation.
Exemple d’exécution :
nom = "Riyad"age = 21ville = "Cotonou"# Créer un message avec ces informationsVoir la solution
nom = "Riyad"age = 21ville = "Cotonou"message = f"Je m'appelle {nom}, j'ai {age} ans et j'habite à {ville}."print(message)Résultat attendu :
Je m'appelle Riyad, j'ai 21 ans et j'habite à Cotonou.Exercice 2 : Calcul dans une f-string
Énoncé : Créez des variables pour le prix unitaire et la quantité d’un produit. Utilisez une f-string pour afficher le prix total (avec calcul directement dans la f-string).
Exemple d’exécution :
prix_unitaire = 15.99quantite = 3# Afficher le prix totalVoir la solution
prix_unitaire = 15.99quantite = 3message = f"Prix total : {prix_unitaire * quantite}€"print(message)
# Avec formatage à 2 décimalesmessage = f"Prix total : {prix_unitaire * quantite:.2f}€"print(message)Résultat attendu :
Prix total : 47.97€Prix total : 47.97€Exercice 3 : Formatage de nombres décimaux
Énoncé : Créez une variable contenant le nombre pi (3.14159265359). Affichez-le avec 2, 4 et 6 décimales en utilisant des f-strings.
Voir la solution
pi = 3.14159265359
print(f"Pi avec 2 décimales : {pi:.2f}")print(f"Pi avec 4 décimales : {pi:.4f}")print(f"Pi avec 6 décimales : {pi:.6f}")Résultat attendu :
Pi avec 2 décimales : 3.14Pi avec 4 décimales : 3.1416Pi avec 6 décimales : 3.141593Exercice 4 : Séparateurs de milliers
Énoncé : Affichez un grand nombre (par exemple 1234567890) avec des séparateurs de milliers en utilisant une f-string.
Voir la solution
nombre = 1234567890print(f"Nombre formaté : {nombre:,}")
# Avec des décimalesprix = 1234567.89print(f"Prix : {prix:,.2f}€")Résultat attendu :
Nombre formaté : 1,234,567,890Prix : 1,234,567.89€Exercice 5 : Zéros de remplissage
Énoncé : Créez un programme qui affiche des numéros de 1 à 10 avec des zéros de remplissage pour avoir toujours 3 chiffres (001, 002, …, 010).
Voir la solution
for i in range(1, 11): print(f"Numéro : {i:03}")Résultat attendu :
Numéro : 001Numéro : 002Numéro : 003Numéro : 004Numéro : 005Numéro : 006Numéro : 007Numéro : 008Numéro : 009Numéro : 010Exercice 6 : Pourcentages
Énoncé : Calculez et affichez le taux de réussite d’un examen. Sur 150 étudiants, 127 ont réussi. Affichez le pourcentage avec 1 décimale.
Voir la solution
reussis = 127total = 150taux = reussis / total
print(f"Taux de réussite : {taux:.1%}")Résultat attendu :
Taux de réussite : 84.7%Exercice 7 : Alignement de texte
Énoncé : Créez un tableau de produits avec leurs prix alignés. Utilisez l’alignement à gauche pour les noms (largeur 20) et à droite pour les prix (largeur 10).
Voir la solution
produits = [ ("Pommes", 2.50), ("Bananes", 1.80), ("Oranges", 3.20), ("Fraises", 4.50)]
print(f"{'Produit':<20} {'Prix':>10}")print("-" * 30)for nom, prix in produits: print(f"{nom:<20} {prix:>10.2f}€")Résultat attendu :
Produit Prix------------------------------Pommes 2.50€Bananes 1.80€Oranges 3.20€Fraises 4.50€Exercice 8 : Formatage de dates
Énoncé : Créez un programme qui affiche la date actuelle dans différents formats :
- Format court : JJ/MM/AAAA
- Format long : Jour Mois Année
- Format avec heure : JJ/MM/AAAA HH:MM:SS
Voir la solution
from datetime import datetime
maintenant = datetime.now()
print(f"Format court : {maintenant:%d/%m/%Y}")print(f"Format long : {maintenant:%A %d %B %Y}")print(f"Avec heure : {maintenant:%d/%m/%Y %H:%M:%S}")Résultat attendu :
Format court : 31/12/2025Format long : mercredi 31 décembre 2025Avec heure : 31/12/2025 21:30:45Exercice 9 : Méthodes de chaînes dans f-strings
Énoncé : Créez une variable avec un nom en minuscules. Utilisez des f-strings pour afficher ce nom en majuscules, en titre (première lettre en majuscule) et en comptant le nombre de caractères.
Voir la solution
nom = "riyad kouadio"
print(f"Majuscules : {nom.upper()}")print(f"Titre : {nom.title()}")print(f"Nombre de caractères : {len(nom)}")print(f"Sans espaces : {nom.replace(' ', '')}")Résultat attendu :
Majuscules : RIYAD KOUADIOTitre : Riyad KouadioNombre de caractères : 13Sans espaces : riyadkouadioExercice 10 : Facture formatée
Énoncé : Créez un programme qui génère une facture formatée pour 3 articles avec leur nom, quantité, prix unitaire et prix total.
Voir la solution
articles = [ ("Clavier", 2, 25.99), ("Souris", 3, 15.50), ("Écran", 1, 299.99)]
print("=" * 60)print(f"{'FACTURE':^60}")print("=" * 60)print(f"{'Article':<20} {'Qté':>5} {'Prix Unit.':>12} {'Total':>12}")print("-" * 60)
total_general = 0for nom, qte, prix in articles: total = qte * prix total_general += total print(f"{nom:<20} {qte:>5} {prix:>12.2f}€ {total:>12.2f}€")
print("-" * 60)print(f"{'TOTAL':>49} {total_general:>12.2f}€")print("=" * 60)Résultat attendu :
============================================================ FACTURE============================================================Article Qté Prix Unit. Total------------------------------------------------------------Clavier 2 25.99€ 51.98€Souris 3 15.50€ 46.50€Écran 1 299.99€ 299.99€------------------------------------------------------------ TOTAL 398.47€============================================================