W3docs

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).

python— editable, runs on the server

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:

python— editable, runs on the server

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:

python— editable, runs on the server

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)  # 9

Sin 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)   # 5

Capturar una sección intermedia

first, *middle, last = (10, 20, 30, 40, 50)

print(first)   # 10
print(middle)  # [20, 30, 40]
print(last)    # 50

Solo 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 it

Combina _ con una expresión star para descartar muchos elementos:

first, *_ = (10, 20, 30, 40)

print(first)  # 10
# *_ swallows 20, 30, 40

Desempaquetado Anidado de Tuplas

Si una tupla contiene otra tupla, puedes desempaquetar ambos niveles en una sola instrucción reflejando el anidamiento con paréntesis:

python— editable, runs on the server

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 three

Desempaquetado 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 cherry

Esto 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 95

Errores 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 assignment

Solo se permite una variable con * por instrucción de desempaquetado.

Referencia Rápida

PatrónEjemploQué hace
Básicoa, b, c = tAsigna cada elemento a una variable nombrada
Star al finalfirst, *rest = tPrimer elemento nombrado; el resto capturado como lista
Star al inicio*start, last = tÚltimo elemento nombrado; el resto capturado como lista
Star en el mediofirst, *mid, last = tPrimero y último nombrados; el medio capturado como lista
Ignorar unox, _, z = tElemento del medio descartado por convención
Ignorar muchosfirst, *_ = tSolo se conserva el primer elemento
Anidadoa, (b, c), d = tTupla interna desempaquetada en la misma instrucción
Buclefor x, y in pairs:Cada par desempaquetado por iteración

Capítulos Relacionados

Práctica

Práctica
What does Python assign to the starred variable when you write `first, *rest = (1, 2, 3, 4, 5)`?
What does Python assign to the starred variable when you write `first, *rest = (1, 2, 3, 4, 5)`?
Was this page helpful?