1. Introduction à enumerate()
- La fonction enumerate() : est une fonction intégrée de Python qui simplifie le parcours des séquences en fournissant simultanément l'indice et la valeur de chaque élément. C'est une alternative élégante à l'utilisation classique de range(len()).
- La syntaxe de base est simple : enumerate(iterable, start=0) où iterable est la collection à parcourir et start la valeur de départ de l'index (0 par défaut).
Exemple illustratif
|
1 2 3 4 |
fruits = ['pomme', 'banane', 'orange'] for i, fruit in enumerate(fruits): print(f"Index {i} : {fruit}") |
|
1 2 3 4 |
Sortie: Index 0 : pomme Index 1 : banane Index 2 : orange |
2. Utilisation Pratique
2.1 Avec différents types d'itérables
L'un des grands avantages de enumerate() est sa polyvalence : il fonctionne avec n'importe quel type d'itérable en Python. Que vous travailliez avec des listes, des tuples, des chaînes de caractères ou même des ensembles, la syntaxe reste identique.
|
1 2 3 4 5 6 7 8 9 10 11 |
# Liste for i, element in enumerate(['a', 'b', 'c']): print(i, element) # Tuple for i, valeur in enumerate((10, 20, 30)): print(i, valeur) # Chaîne de caractères for i, lettre in enumerate("ABC"): print(i, lettre) |
|
1 2 3 4 5 6 7 8 9 10 |
Sortie: 0 a 1 b 2 c 0 10 1 20 2 30 0 A 1 B 2 C |
2.2 Paramètre start personnalisé
Le paramètre start permet de personnaliser la valeur de départ de l'index. C'est particulièrement utile lorsque vous souhaitez une numérotation commençant à 1 (plus naturelle pour l'affichage à l'utilisateur) ou pour créer des identifiants spécifiques.
|
1 2 3 4 5 6 7 8 9 10 |
jours = ['Lundi', 'Mardi', 'Mercredi'] # Départ à 1 pour une numérotation plus intuitive for i, jour in enumerate(jours, start=1): print(f"Jour {i} : {jour}") # Application pratique : numérotation de lignes d'un document lignes = ["Première ligne", "Deuxième ligne"] for num, ligne in enumerate(lignes, start=1): print(f"{num}. {ligne}") |
|
1 2 3 4 5 6 |
Sortie: Jour 1 : Lundi Jour 2 : Mardi Jour 3 : Mercredi 1. Première ligne 2. Deuxième ligne |
3. Cas d'Utilisation Avancés
Au-delà des utilisations basiques, enumerate() brille dans des scénarios plus complexes où la connaissance de l'indice est cruciale pour la logique du programme.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Recherche avec conservation des positions def trouver_positions(liste, valeur_cherchee): """Retourne tous les indices où la valeur apparaît""" positions = [] for index, valeur in enumerate(liste): if valeur == valeur_cherchee: positions.append(index) return positions # Test avec une liste contenant des doublons nombres = [1, 3, 5, 3, 7, 3, 9] print("Positions du nombre 3 :", trouver_positions(nombres, 3)) # Combinaison avec zip() pour synchroniser plusieurs listes noms = ['Alice', 'Bob'] ages = [25, 30] for i, (nom, age) in enumerate(zip(noms, ages)): print(f"Personne {i}: {nom} a {age} ans") # Filtrage conditionnel avec conservation des indices originaux nombres = [10, 15, 20, 25] pairs = [(i, n) for i, n in enumerate(nombres) if n % 2 == 0] print("Nombres pairs avec leurs indices :", pairs) |
|
1 2 3 4 5 |
Sortie: Positions du nombre 3 : [1, 3, 5] Personne 0: Alice a 25 ans Personne 1: Bob a 30 ans Nombres pairs avec indices : [(0, 10), (2, 20)] |
4. Bonnes Pratiques et Comparaisons
4.1 Pourquoi préférer enumerate() à range(len()) ?
enumerate() n'est pas seulement une question de style : il offre une meilleure lisibilité et souvent de meilleures performances. Comparez ces deux approches pour parcourir une liste avec ses indices.
|
1 2 3 4 5 6 7 8 9 10 11 |
liste = ['a', 'b', 'c'] # Approche traditionnelle avec range(len()) print("Approche range(len()) :") for i in range(len(liste)): print(f"Indice {i} → Valeur {liste[i]}") # Approche Pythonique avec enumerate() print("\nApproche enumerate() :") for i, element in enumerate(liste): print(f"Indice {i} → Valeur {element}") |
|
1 2 3 4 5 6 7 8 9 10 |
Sortie: Approche range(len()) : Indice 0 → Valeur a Indice 1 → Valeur b Indice 2 → Valeur c Approche enumerate() : Indice 0 → Valeur a Indice 1 → Valeur b Indice 2 → Valeur c |
4.2 Piège courant : l'oubli de l'unpacking
Une erreur fréquente avec les débutants est d'oublier de "dépaqueter" le tuple retourné par enumerate(). Sans unpacking, vous récupérez le tuple complet plutôt que ses composants individuels.
|
1 2 3 4 5 6 7 8 9 |
# Sans unpacking : on récupère le tuple (index, valeur) print("Sans unpacking (erreur courante) :") for element in enumerate(['x', 'y', 'z']): print("Tuple complet :", element) # Avec unpacking : on récupère index et valeur séparément print("\nAvec unpacking (bonne pratique) :") for i, element in enumerate(['x', 'y', 'z']): print(f"Index {i} : Valeur {element}") |
|
1 2 3 4 5 6 7 8 9 10 |
Sortie: Sans unpacking (erreur courante) : Tuple complet : (0, 'x') Tuple complet : (1, 'y') Tuple complet : (2, 'z') Avec unpacking (bonne pratique) : Index 0 : Valeur x Index 1 : Valeur y Index 2 : Valeur z |
4.3 Exemple pratique complet
Voici un exemple concret montrant comment enumerate() peut simplifier la création d'interfaces utilisateur simples comme des menus interactifs.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Création d'un menu interactif élégant options = ["Quitter le programme", "Ajouter un élément", "Supprimer un élément", "Afficher la liste"] print("=" * 30) print("MENU PRINCIPAL") print("=" * 30) # Affichage numéroté commençant à 1 for i, option in enumerate(options, start=1): print(f"{i}. {option}") print("=" * 30) # Simulation d'un choix utilisateur choix_utilisateur = 2 if 1 <= choix_utilisateur <= len(options): action_selectionnee = options[choix_utilisateur - 1] print("\nAction sélectionnée :", action_selectionnee) else: print("\nChoix invalide !") |
|
1 2 3 4 5 6 7 8 9 10 11 |
Sortie: ============================== MENU PRINCIPAL ============================== 1. Quitter le programme 2. Ajouter un élément 3. Supprimer un élément 4. Afficher la liste ============================== Action sélectionnée : Ajouter un élément |
Younes Derfoufi
CRMEF OUJDA



