Skip to content

Listes et Structures de Données

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.

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.

ma_liste = [] # Liste vide
# Listes avec des éléments
fruits = ["pomme", "orange", "mangue"]
nombres = [1, 2, 3, 4, 5]
mixte = ["hello", 40, True, 3.14] # Peut mélanger les types

Syntaxe : 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
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

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 notes
notes.append("Acheter du lait")
notes.append("Rendez-vous médecin 15h")
notes.append("Appeler Marie")
print(f"Notes : {notes}")
# Supprimer une note terminée
notes.remove("Acheter du lait")
print(f"Notes restantes : {notes}")

Exemple réel : Système de notifications

notifications = ["Message de Paul", "Email reçu"]
# Nouvelle notification
notifications.append("Mise à jour disponible")
# L'utilisateur lit la première
notifications.remove("Message de Paul")
print(f"Notifications actives : {len(notifications)}")

Exemple réel : Gestion de stock

stock = ["Pommes", "Bananes", "Oranges"]
# Arrivage
stock.append("Mangues")
stock.append("Kiwis")
# Produit vendu
stock.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éthodeActionExempleUsage réel
append(x)Ajoute à la finliste.append(5)Ajouter un produit au panier
remove(x)Supprime l’élément xliste.remove("pomme")Retirer un article
insert(i, x)Insère à la position iliste.insert(0, "urgent")Priorité haute
pop()Retire le dernierliste.pop()File d’attente LIFO
len(liste)Nombre d’élémentslen(fruits)Compter les items
sort()Trie la listenombres.sort()Classement
reverse()Inverse l’ordreliste.reverse()Ordre décroissant
clear()Vide la listeliste.clear()Reset

Exemple réel : Système de priorités

taches = ["Tâche normale", "Autre tâche"]
# Ajouter une tâche urgente en premier
taches.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

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.

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 = paris
print(f"Paris : {latitude}°N, {longitude}°E")

Exemple réel : Configuration système

# Ces valeurs ne doivent JAMAIS changer
DATABASE_CONFIG = ("localhost", 5432, "postgres")
API_VERSION = (1, 0, 0)
host, port, db_name = DATABASE_CONFIG
print(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 = rouge
print(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

Les tuples permettent d’assigner plusieurs variables en une seule ligne.

point = (10, 20)
x, y = point
print(f"x = {x}, y = {y}") # x = 10, y = 20

Échanger deux variables :

a = 8
b = 10
a, b = b, a # Échange en une ligne !
print(f"a = {a}, b = {b}") # a = 10, b = 8

Exemple 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
CritèreListeTuple
ModificationOuiNon
PerformancePlus lentPlus rapide
UsageDonnées changeantesDonnées fixes
ExemplesPanier d’achatCoordonnées GPS
Liste de tâchesConfiguration
HistoriqueDimensions d’image

Règle simple :

  • Si les données peuvent changer → Liste
  • Si les données sont fixes → Tuple

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).

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

Méthode directe :

personne = {"nom": "ODJOUADE", "prenom": "Riyad", "age": 21}
print(personne["nom"]) # "ODJOUADE"

Méthode get() (plus sûre) :

print(personne.get("age")) # 21
print(personne.get("email", "Non défini")) # "Non défini" (car n'existe pas)

Différence importante :

  • personne["email"] → Erreur si la clé n’existe pas
  • personne.get("email") → Retourne None sans erreur
  • personne.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

Ajouter ou modifier :

personne["email"] = "riyad@example.com"
personne["age"] = 22

Supprimer :

del personne["ville"]

Exemple réel : Panier d’achat

panier = {
"laptop": 1,
"souris": 2,
"clavier": 1
}
# Ajouter un produit
panier["écran"] = 1
# Modifier une quantité
panier["souris"] = 3
# Retirer un produit
del 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)) # Calcul
print(calculer_avec_cache(5)) # Cache

Utilisé dans :

  • Paniers d’achat
  • Systèmes de cache
  • Compteurs et statistiques
  • Mise à jour de profils
  • Gestion d’états
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
StructureSymbolesModifiableOrdonnéUsage principal
Liste[]OuiOuiCollections similaires
Tuple()NonOuiDonnées fixes
Dictionnaire{}OuiNon*Associations clé-valeur

*Depuis Python 3.7, l’ordre d’insertion est préservé.

# Utilisateur connecté
user = {
"id": 1,
"nom": "Alice",
"permissions": ["read", "write", "delete"]
}
if "delete" in user["permissions"]:
afficher_bouton_supprimer()
# Analyse de données
donnees = [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}")
# État des serveurs
serveurs = [
{"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")

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 ? 🚀


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 = 21
ville = "Cotonou"
# Créer un message avec ces informations
Voir la solution
nom = "Riyad"
age = 21
ville = "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.99
quantite = 3
# Afficher le prix total
Voir la solution
prix_unitaire = 15.99
quantite = 3
message = f"Prix total : {prix_unitaire * quantite}€"
print(message)
# Avec formatage à 2 décimales
message = 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.14
Pi avec 4 décimales : 3.1416
Pi avec 6 décimales : 3.141593

Exercice 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 = 1234567890
print(f"Nombre formaté : {nombre:,}")
# Avec des décimales
prix = 1234567.89
print(f"Prix : {prix:,.2f}€")

Résultat attendu :

Nombre formaté : 1,234,567,890
Prix : 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 : 001
Numéro : 002
Numéro : 003
Numéro : 004
Numéro : 005
Numéro : 006
Numéro : 007
Numéro : 008
Numéro : 009
Numéro : 010

Exercice 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 = 127
total = 150
taux = 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/2025
Format long : mercredi 31 décembre 2025
Avec heure : 31/12/2025 21:30:45

Exercice 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 KOUADIO
Titre : Riyad Kouadio
Nombre de caractères : 13
Sans espaces : riyadkouadio

Exercice 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 = 0
for 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€
============================================================


À propos de l'auteur

Riyad ODJOUADEExpert en cybersécurité & infrastructure

Je partage des guides techniques pratiques sur la cybersécurité, l'administration système et le développement web. Tous les contenus sont basés sur des expérimentations réelles.