Desempaquetado de Tuplas en Python: Guía Completa
Aprende el desempaquetado de tuplas en Python: sintaxis básica, expresiones star, tuplas anidadas, bucles y errores comunes con ejemplos ejecutables.
El desempaquetado de tuplas (también llamado desempaquetado de iterables) permite asignar los elementos de una tupla — o cualquier iterable — a variables individuales en una sola instrucción. Esta página cubre todo, desde la sintaxis básica hasta patrones avanzados como expresiones star, desempaquetado anidado y desempaquetado en bucles.
¿Qué es el Desempaquetado de Tuplas?
Cuando desempaquetas una tupla, Python asigna cada elemento a una variable correspondiente en el lado izquierdo de =. El número de variables debe coincidir exactamente con el número de elementos (a menos que uses una expresión star, que se explica más adelante).
Los paréntesis alrededor de la tupla son opcionales — 1, 2, 3 también es una tupla. Estas dos líneas son equivalentes:
a, b, c = (1, 2, 3)
a, b, c = 1, 2, 3 # same result¿Por qué Usar el Desempaquetado de Tuplas?
Asignación concisa de variables
Sin desempaquetado necesitas una línea por elemento:
Intercambio de variables
El desempaquetado hace que intercambiar dos valores sea algo de una sola línea. Python evalúa el lado derecho completamente antes de asignar, por lo que no se necesita una variable temporal:
Lectura de valores de retorno de funciones
Las funciones que retornan múltiples valores en realidad devuelven una tupla. El desempaquetado le da a cada valor un nombre significativo de inmediato:
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) # 9Sin desempaquetado escribirías result[0] y result[1], lo cual es menos legible.
Desempaquetado Extendido con el Operador Star
Cuando no sabes (o no te importa) el número de elementos intermedios, antepón * a una variable para capturar todo lo que no coincida con una posición nombrada. La variable con star siempre recibe una lista, incluso si captura cero elementos.
Capturar el final
first, *rest = (1, 2, 3, 4, 5)
print(first) # 1
print(rest) # [2, 3, 4, 5]Capturar el inicio
*start, last = (1, 2, 3, 4, 5)
print(start) # [1, 2, 3, 4]
print(last) # 5Capturar una sección intermedia
first, *middle, last = (10, 20, 30, 40, 50)
print(first) # 10
print(middle) # [20, 30, 40]
print(last) # 50Solo se permite una variable con star por instrucción de desempaquetado. Usar dos o más genera un SyntaxError.
Ignorar Elementos con _
La convención de Python usa _ como nombre de variable desechable. Es un identificador válido — Python simplemente le asigna un valor — pero por convención indica "no necesito este valor".
x, _, z = (10, 99, 30)
print(x) # 10
print(z) # 30
# _ holds 99 but we do not use itCombina _ con una expresión star para descartar muchos elementos:
first, *_ = (10, 20, 30, 40)
print(first) # 10
# *_ swallows 20, 30, 40Desempaquetado Anidado de Tuplas
Si una tupla contiene otra tupla, puedes desempaquetar ambos niveles en una sola instrucción reflejando el anidamiento con paréntesis:
Esto funciona a cualquier profundidad, pero el anidamiento profundo perjudica la legibilidad — considera desempaquetar en etapas en su lugar.
Desempaquetado en Bucles for
Puedes desempaquetar cada elemento de un iterable directamente en la instrucción for. Esto es especialmente útil con listas de tuplas:
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
for num, word in pairs:
print(num, word)
# 1 one
# 2 two
# 3 threeDesempaquetado con enumerate()
enumerate() devuelve pares (índice, valor) que puedes desempaquetar directamente:
fruits = ('apple', 'banana', 'cherry')
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple
# 1 banana
# 2 cherryEsto evita el seguimiento manual de índices y es el patrón idiomático de Python para iterar sobre una secuencia cuando necesitas tanto la posición como el valor.
Desempaquetado con zip()
zip() empareja elementos de dos iterables, y puedes desempaquetar cada par en el bucle:
names = ('Alice', 'Bob', 'Carol')
scores = (92, 87, 95)
for name, score in zip(names, scores):
print(name, score)
# Alice 92
# Bob 87
# Carol 95Errores Comunes
Demasiados o muy pocos valores
Python lanza ValueError si el número de variables no coincide con el número de elementos (y no hay expresión star):
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)Corrige la discrepancia o usa una expresión star para absorber los elementos extra.
Dos variables con star
first, *middle, *last = (1, 2, 3, 4)
# SyntaxError: multiple starred expressions in assignmentSolo se permite una variable con * por instrucción de desempaquetado.
Referencia Rápida
| Patrón | Ejemplo | Qué hace |
|---|---|---|
| Básico | a, b, c = t | Asigna cada elemento a una variable nombrada |
| Star al final | first, *rest = t | Primer elemento nombrado; el resto capturado como lista |
| Star al inicio | *start, last = t | Último elemento nombrado; el resto capturado como lista |
| Star en el medio | first, *mid, last = t | Primero y último nombrados; el medio capturado como lista |
| Ignorar uno | x, _, z = t | Elemento del medio descartado por convención |
| Ignorar muchos | first, *_ = t | Solo se conserva el primer elemento |
| Anidado | a, (b, c), d = t | Tupla interna desempaquetada en la misma instrucción |
| Bucle | for x, y in pairs: | Cada par desempaquetado por iteración |
Capítulos Relacionados
- Python Tuples — crear, indexar y hacer slicing de tuplas
- Access Tuples — leer elementos individuales por índice
- Loop Tuples — iterar sobre elementos de una tupla
- Join Tuples — combinar múltiples tuplas
- Tuple Methods —
count()eindex() - Update Tuples — trabajar con la inmutabilidad