zip & enumerate
enumerate numérote les éléments d'une séquence et zip parcourt plusieurs séquences en parallèle. Ils remplacent les boucles sur range(len(...)), plus longues et plus fragiles.
- zip
- enumerate
- parallèle
- index
- pairwise
- strict
Syntaxe
for i, x in enumerate(sequence, start=1): ...for a, b in zip(seq1, seq2, strict=True): ...dict(zip(cles, valeurs))Exemple
eleves = ["Ana", "Bob", "Chloé"]notes = [14, 8, 17]for rang, (nom, note) in enumerate(zip(eleves, notes), start=1): print(f"{rang}. {nom} : {note}")# → 1. Ana : 14# → 2. Bob : 8# → 3. Chloé : 17carnet = dict(zip(eleves, notes))print(carnet) # → {'Ana': 14, 'Bob': 8, 'Chloé': 17}ca_mensuel = [100, 130, 120, 150]evolutions = [apres - avant for avant, apres in zip(ca_mensuel, ca_mensuel[1:])]print(evolutions) # → [30, -10, 30]À retenir
- enumerate(seq, start=1) commence la numérotation à 1, pratique pour un classement ou un numéro de ligne de fichier.
- dict(zip(cles, valeurs)) assemble un dictionnaire à partir de deux listes alignées.
- zip(l, l[1:]) forme les paires (valeur, valeur suivante) pour calculer des écarts d'une période à l'autre ; itertools.pairwise(l) fait de même sans copier la liste.
- Piège : zip s'arrête sans prévenir sur la séquence la plus courte, si bien qu'une donnée manquante passe inaperçue. Avec strict=True (3.10+), il lève une erreur si les longueurs diffèrent.
- zip(*lignes) transpose une liste de lignes en colonnes.
Voir aussi
- forfor parcourt un à un les éléments d'une collection : liste, chaîne, dictionnaire, range ou fichier. C'est la boucle de base pour cumuler, compter ou transformer une série de valeurs.
- CompréhensionsUne compréhension construit une liste, un dictionnaire ou un ensemble en une seule expression qui transforme et filtre. Employez-la dès qu'une boucle ne sert qu'à remplir une collection.
- DictionnairesUn dictionnaire associe des clés uniques à des valeurs, comme une fiche ou une ligne de table. On s'en sert pour retrouver une information par son identifiant, compter ou regrouper.