HOWTO · Python
Comment utiliser une boucle for pour plusieurs variables en Python
Ce tutoriel explique comment utiliser une boucle for pour plusieurs variables en Python.
Sur cette page
Une boucle for Python peut affecter plusieurs variables à la fois lorsque chaque élément produit par l’itérable a la forme correspondante. C’est ce qu’on appelle le déballage d’itérable. Utilisez le modèle qui correspond à vos données : paires de dictionnaire, un index et un élément, valeurs correspondantes, index explicites ou chaque paire croisée.
Utiliser la boucle for avec la méthode items() pour des affectations multiples dans un dictionnaire en Python
Un dictionnaire stocke des paires clé/valeur. Sa méthode items() fournit une vue dynamique qui peut être itérée sous forme de paires ; elle ne crée pas de liste. La cible de boucle key, value déballe chaque paire au fur et à mesure que la boucle la visite.
dict1 = {1: "Bitcoin", 2: "Ethereum"}
for key, value in dict1.items():
print(f"Key {key} has value {value}")
Ceci est un exemple autonome. Sa sortie n’est pas incluse car aucune preuve d’exécution n’est disponible pour ce code.
Utiliser la boucle for avec la fonction enumerate() pour des affectations multiples dans une liste en Python
enumerate() produit un index et un élément à partir d’un itérable. L’exemple utilise cet index pour rechercher le prix correspondant dans une deuxième liste, donc les listes doivent être alignées et chaque index de pièce doit exister dans prices. Lorsque l’objectif est simplement d’apparier des valeurs, zip() l’exprime directement.
coins = ["Bitcoin", "Ethereum", "Cardano"]
prices = [48000, 2585, 2]
for i, coin in enumerate(coins):
price = prices[i]
print(f"${price} for 1 {coin}")
Cet exemple n’a pas été exécuté ici ; sa sortie est donc omise.
Utiliser la fonction zip() pour des affectations multiples dans un tuple ou une liste en Python
Utilisez zip() pour déballer les valeurs correspondantes d’itérables parallèles. Il produit ici des paires, donc chaque itération affecte une pièce et un prix. Le zip() ordinaire s’arrête dès que l’itérable d’entrée le plus court est épuisé ; les éléments finaux sans correspondance ne sont pas traités.
coins = ["Bitcoin", "Ethereum", "Cardano"]
prices = [48000, 2585, 2]
for coin, price in zip(coins, prices):
print(f"${price} for 1 {coin}")
Aucune preuve d’exécution n’est disponible pour cet exemple, donc aucune sortie n’est affichée.
Utiliser la fonction range() pour des affectations multiples dans une liste en Python
Utilisez range(len(sequence)) lorsque l’index lui-même est nécessaire, par exemple lors de l’accès à plusieurs séquences par position. Étant donné que la boucle ci-dessous utilise les index de list1 pour les deux listes, list2 doit avoir au moins autant d’éléments que list1.
list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
for i in range(len(list1)):
item1 = list1[i]
item2 = list2[i]
print(item1, item2)
Cet exemple exécutable n’a pas été exécuté ici ; la sortie est omise. Pour une itération alignée ordinaire, zip() évite l’indexation manuelle.
Utiliser des boucles for imbriquées pour des affectations multiples dans une liste en Python
Les boucles imbriquées produisent un produit cartésien : chaque valeur du premier itérable est appariée à chaque valeur du second. Choisissez cela lorsque vous avez besoin de toutes les combinaisons, plutôt que de paires un à un comme avec zip().
list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
for item1 in list1:
for item2 in list2:
print(item1, item2)
Cet exemple n’a pas été exécuté ici, donc sa sortie est omise.
Conclusion
Le déballage d’itérable permet à une boucle d’affecter plusieurs variables à partir de chaque élément qu’elle reçoit, à condition que la forme de l’élément corresponde à la cible de la boucle. Utilisez items() pour les paires clé/valeur de dictionnaire, enumerate() lorsque vous avez besoin d’un index avec un élément, et zip() pour les valeurs correspondantes d’itérables parallèles. Choisissez range(len(...)) lorsqu’un accès basé sur l’index est requis, et des boucles imbriquées lorsque chaque paire croisée est nécessaire.