Déballage de tuples en Python : Guide complet
Apprenez le déballage de tuples Python : syntaxe de base, expressions star, tuples imbriqués, déballage en boucle et erreurs courantes avec des exemples.
Le déballage de tuple (aussi appelé déballage d'itérable) vous permet d'affecter les éléments d'un tuple — ou de tout itérable — à des variables individuelles en une seule instruction. Cette page couvre tout, de la syntaxe de base aux modèles avancés tels que les expressions star, le déballage imbriqué et le déballage en boucle.
Qu'est-ce que le déballage de tuple ?
Lorsque vous déballez un tuple, Python associe chaque élément à une variable correspondante sur le côté gauche de =. Le nombre de variables doit correspondre exactement au nombre d'éléments (sauf si vous utilisez une expression star, abordée ci-dessous).
Les parenthèses autour du tuple sont facultatives — 1, 2, 3 est aussi un tuple. Ces deux lignes sont équivalentes :
a, b, c = (1, 2, 3)
a, b, c = 1, 2, 3 # same resultPourquoi utiliser le déballage de tuple ?
Affectation de variables concise
Sans déballage, vous avez besoin d'une ligne par élément :
Échanger des variables
Le déballage permet d'échanger deux valeurs en une seule ligne. Python évalue entièrement le côté droit avant d'effectuer l'affectation, donc aucune variable temporaire n'est nécessaire :
Lire les valeurs de retour d'une fonction
Les fonctions qui renvoient plusieurs valeurs retournent en réalité un tuple. Le déballage donne immédiatement un nom significatif à chaque valeur :
def min_max(numbers):
return min(numbers), max(numbers)
lo, hi = min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(lo) # 1
print(hi) # 9Sans déballage, vous écririez result[0] et result[1], ce qui est moins lisible.
Déballage étendu avec l'opérateur star
Lorsque vous ne connaissez pas (ou ne vous souciez pas) du nombre d'éléments intermédiaires, préfixez une variable avec * pour capturer tout ce qui ne correspond pas à un emplacement nommé. La variable avec star reçoit toujours une liste, même si elle ne capture aucun élément.
Capturer une queue
first, *rest = (1, 2, 3, 4, 5)
print(first) # 1
print(rest) # [2, 3, 4, 5]Capturer une tête
*start, last = (1, 2, 3, 4, 5)
print(start) # [1, 2, 3, 4]
print(last) # 5Capturer une section intermédiaire
first, *middle, last = (10, 20, 30, 40, 50)
print(first) # 10
print(middle) # [20, 30, 40]
print(last) # 50Seule une variable avec star est autorisée par instruction de déballage. En utiliser deux ou plus lève une SyntaxError.
Ignorer des éléments avec _
La convention Python utilise _ comme nom de variable de rebut. C'est un identifiant valide — Python l'affecte normalement — mais par convention il signale « je n'ai pas besoin de cette valeur ».
x, _, z = (10, 99, 30)
print(x) # 10
print(z) # 30
# _ holds 99 but we do not use itCombinez _ avec une expression star pour ignorer de nombreux éléments :
first, *_ = (10, 20, 30, 40)
print(first) # 10
# *_ swallows 20, 30, 40Déballage de tuples imbriqués
Si un tuple contient un autre tuple, vous pouvez déballer les deux niveaux en une seule instruction en reproduisant l'imbrication avec des parenthèses :
Cela fonctionne à n'importe quelle profondeur, mais un imbrication trop profonde nuit à la lisibilité — envisagez plutôt de déballer en plusieurs étapes.
Déballage dans les boucles for
Vous pouvez déballer chaque élément d'un itérable directement dans l'instruction for. C'est particulièrement utile avec des listes de tuples :
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
for num, word in pairs:
print(num, word)
# 1 one
# 2 two
# 3 threeDéballage avec enumerate()
enumerate() retourne des paires (index, valeur) que vous pouvez déballer directement :
fruits = ('apple', 'banana', 'cherry')
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple
# 1 banana
# 2 cherryCela évite le suivi manuel des index et constitue le modèle Python idiomatique pour itérer sur une séquence lorsque vous avez besoin à la fois de la position et de la valeur.
Déballage avec zip()
zip() associe les éléments de deux itérables, et vous pouvez déballer chaque paire dans la boucle :
names = ('Alice', 'Bob', 'Carol')
scores = (92, 87, 95)
for name, score in zip(names, scores):
print(name, score)
# Alice 92
# Bob 87
# Carol 95Erreurs courantes
Trop ou pas assez de valeurs
Python lève une ValueError si le nombre de variables ne correspond pas au nombre d'éléments (et qu'aucune expression star n'est présente) :
a, b = (1, 2, 3)
# ValueError: too many values to unpack (expected 2)a, b, c = (1, 2)
# ValueError: not enough values to unpack (expected 3, got 2)Corrigez la discordance ou utilisez une expression star pour absorber les éléments supplémentaires.
Deux variables avec star
first, *middle, *last = (1, 2, 3, 4)
# SyntaxError: multiple starred expressions in assignmentSeule une variable * est autorisée par instruction de déballage.
Référence rapide
| Modèle | Exemple | Ce que ça fait |
|---|---|---|
| Basique | a, b, c = t | Affecte chaque élément à une variable nommée |
| Star en queue | first, *rest = t | Premier élément nommé ; le reste capturé dans une liste |
| Star en tête | *start, last = t | Dernier élément nommé ; le reste capturé dans une liste |
| Star au milieu | first, *mid, last = t | Premier et dernier nommés ; le milieu capturé dans une liste |
| Ignorer un | x, _, z = t | Élément du milieu ignoré par convention |
| Ignorer plusieurs | first, *_ = t | Seul le premier élément est conservé |
| Imbriqué | a, (b, c), d = t | Tuple interne déballé dans la même instruction |
| Boucle | for x, y in pairs: | Chaque paire déballée à chaque itération |
Chapitres associés
- Python Tuples — créer, indexer et découper des tuples
- Access Tuples — lire des éléments individuels par index
- Loop Tuples — itérer sur les éléments d'un tuple
- Join Tuples — combiner plusieurs tuples
- Tuple Methods —
count()etindex() - Update Tuples — contourner l'immuabilité