dans cette leçon, vous allez apprendre à utiliser range pour générer des suites de nombres, enumerate pour avoir index + valeur, et zip pour combiner plusieurs séquences.
objectifs
- générer des nombres avec
range(start, stop, step) - itérer avec index et valeur via
enumerate - synchroniser plusieurs itérables avec
zip - comprendre les limites et bonnes pratiques
range : générer des entiers
range produit une séquence d’entiers de start inclus à stop exclu, avec un step optionnel.
for i in range(5): # 0,1,2,3,4
print(i)
for i in range(2, 7): # 2..6
print(i)
for i in range(10, 0, -2): # 10, 8, 6, 4, 2
print(i)
convertir en liste si besoin :
list(range(3)) # [0, 1, 2]
enumerate : index + valeur
enumerate fournit un compteur et la valeur correspondante.
fruits = ["pomme", "banane", "cerise"]
for i, fruit in enumerate(fruits):
print(i, fruit)
démarrer l’index ailleurs :
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
zip : itérer en parallèle
zip regroupe élément par élément plusieurs séquences.
noms = ["ana", "bob", "chris"]
scores = [15, 18, 12]
for nom, score in zip(noms, scores):
print(f"{nom}: {score}")
si les longueurs diffèrent, zip s’arrête au plus court :
list(zip([1, 2], [10, 20, 30])) # [(1, 10), (2, 20)]
pour aller au plus long avec valeurs manquantes, utilisez itertools.zip_longest.
from itertools import zip_longest
for a, b in zip_longest([1, 2], [10, 20, 30], fillvalue=None):
print(a, b)
combiner enumerate et zip
for i, (nom, score) in enumerate(zip(noms, scores), start=1):
print(f"{i}. {nom}: {score}")
bonnes pratiques
- préférez
enumerateàrange(len(...))quand vous avez besoin des valeurs - utilisez
zippour éviter de gérer manuellement plusieurs index - déstructurez les tuples
(a, b)directement dans la boucle - si besoin de l’index + valeur + autre séquence, combinez
enumerateetzip
mini exemples exécutables
# table de multiplication 1..3
for i in range(1, 4):
for j in range(1, 4):
print(f"{i}x{j}={i*j}", end=" ")
print()
# affichage numéroté
tasks = ["manger", "coder", "dormir"]
for i, task in enumerate(tasks, start=1):
print(f"{i}) {task}")
# associer noms et scores
noms = ["alice", "bob"]
scores = [8, 12]
for nom, score in zip(noms, scores):
print(f"{nom}: {score}")
# comparer listes avec zip_longest
a = [1, 2, 3]
b = ["a", "b"]
from itertools import zip_longest
for x, y in zip_longest(a, b, fillvalue="?"):
print(x, y)
pièges courants
- oublier que
rangeexclut lestop - boucler avec
range(len(seq))alors qu’unenumerateest plus clair - oublier de déstructurer
(x, y)renvoyé parzip - penser que
zipremplit avecNone→ il s’arrête au plus court
exercices
-
indices pairs afficher uniquement les éléments d’une liste aux indices pairs avec
enumerate. -
correspondance produits/prix deux listes :
produits,prix. afficherproduit: prix €aveczip. -
produit cartésien créer toutes les combinaisons
(x, y)pourxdans["a", "b"]etydans[1, 2, 3]avec une double bouclefor. -
index et deux séquences afficher un tableau numéroté
nom: scoreen combinantenumerateetzip. -
fusion listes de tailles différentes associer deux listes de tailles différentes avec
zip_longest, en remplissant les manques par"n/a".