Explication de la leçon
Après cette leçon, tu seras capable de :
zip() sans les indexer manuellement.zip() s'arrête à l'entrée la plus courte et ce que cela implique pour les données manquantes.enumerate() et zip() pour numéroter des enregistrements appariés.Parfois, un programme reçoit des données liées dans des séquences parallèles : l'une contient des noms et l'autre des valeurs dans le même ordre. zip() les associe par position. Chaque paire peut être décompactée directement dans une boucle for.
for item, value in zip(items, values):
...Important : zip() standard s'arrête dès que son entrée la plus courte est épuisée. Il n'invente pas de valeurs de remplacement pour les éléments manquants. Lorsque les longueurs doivent correspondre exactement, vérifie-les séparément avant l'association ; sinon, les valeurs en trop sont ignorées.
Tu connais déjà enumerate() pour numéroter des valeurs. Place-le autour de zip() lorsque tu as besoin d'un numéro d'affichage commençant à 1 et des deux valeurs. Le décompactage de tuple de Python permet à la boucle de recevoir les trois proprement.
Pour des clés uniques et alignées, dict(zip(keys, values)) construit également une table de correspondance. Attention : les clés en double sont écrasées par la dernière valeur appariée.
zones = ["west", "east"]
replicas = [2, 4]
for zone, count in zip(zones, replicas):
print(f"{zone}: {count} replicas")Sortie :
west: 2 replicas
east: 4 replicasChaque étape de boucle te donne une paire alignée.
teams = ["alpha", "beta", "gamma"]
regions = ["eu", "us"]
print(list(zip(teams, regions)))Sortie :
[('alpha', 'eu'), ('beta', 'us')]gamma n'est pas associé : il n'y a pas de troisième région.
services = ["cache", "api"]
ports = [6379, 8080]
for number, (service, port) in enumerate(zip(services, ports), start=1):
print(f"{number}. {service} uses {port}")Sortie :
1. cache uses 6379
2. api uses 8080Les parenthèses autour de (service, port) décompactent la paire à l'intérieur de l'élément numéroté.
features = ["search", "export"]
limits = [20, 5]
lookup = dict(zip(features, limits))
print(lookup)Sortie :
{'search': 20, 'export': 5}En cas de noms de fonctionnalités en double, la limite appariée la plus tardive remplacerait la précédente.
| Objectif | Modèle |
|---|---|
| Associer des valeurs alignées | zip(first, second) |
| Itérer sur des paires | for left, right in zip(...): |
| Numéroter des valeurs associées | enumerate(zip(...), start=1) |
| Construire un dictionnaire | dict(zip(keys, values)) |
| Éviter les pertes silencieuses de données | Vérifier les longueurs avant d'utiliser zip() si nécessaire |
zip() n'est pas une jointure externe complète : il s'arrête à l'entrée la plus courte.enumerate(zip(...)) produit un nombre et une paire ; décompacte les deux niveaux correctement.