CAP 04 · LEC 04·Funciones

Unpacking: desempaquetar tuplas, listas y diccionarios

El unpacking es uno de los superpoderes de Python. Asignar múltiples variables de una colección en una sola línea, con soporte para el operador * para capturar el resto.

● INTERMEDIO7 min lectura4 ejerciciospor Fernando Herrera · actualizado mayo de 2026
¿Encontraste un error o algo que mejorar?Editá esta lección en GitHub →

Unpacking básico de tuplas y listas

El unpacking permite asignar los elementos de una colección a múltiples variables en una sola instrucción:

# Unpacking de tupla coordenadas = (40.7128, -74.0060) latitud, longitud = coordenadas print(f"Lat: {latitud}, Lon: {longitud}") # Unpacking de lista colores = ["rojo", "verde", "azul"] primero, segundo, tercero = colores print(primero, segundo, tercero) # El número de variables debe coincidir con el número de elementos # nombre, edad = ("Ana", 28, "Madrid") # ValueError: too many values to unpack # Ignorar valores con _ (convención) nombre, _, ciudad = ("Ana", 28, "Madrid") # ignoramos la edad print(f"{nombre} de {ciudad}") # Unpacking en múltiples niveles punto_3d = ((1, 2), 3) (x, y), z = punto_3d print(f"x={x}, y={y}, z={z}")
SalidaLat: 40.7128, Lon: -74.006 rojo verde azul Ana de Madrid x=1, y=2, z=3
_ como variable de descarte

Por convención, _ (guion bajo simple) se usa para variables que deliberadamente no vas a usar. El linter no se queja de variables _ sin usar, a diferencia de otras variables.

El operador * para capturar el resto

El operador * en el unpacking captura todos los elementos que no fueron asignados a otras variables:

# * captura el "resto" como lista numeros = [1, 2, 3, 4, 5, 6, 7] primero, *resto = numeros print(primero) # 1 print(resto) # [2, 3, 4, 5, 6, 7] *inicio, ultimo = numeros print(inicio) # [1, 2, 3, 4, 5, 6] print(ultimo) # 7 # * en el medio primer, *medio, penultimo, ultimo = numeros print(primer) # 1 print(medio) # [2, 3, 4, 5] print(penultimo) # 6 print(ultimo) # 7 # Útil para head/tail de listas datos = [10, 20, 30, 40, 50] cabeza, *cola = datos print(f"Cabeza: {cabeza}") # Cabeza: 10 print(f"Cola: {cola}") # Cola: [20, 30, 40, 50] # * con strings primera_letra, *resto_letras = "Python" print(primera_letra) # P print(resto_letras) # ['y', 't', 'h', 'o', 'n']
Salida1 [2, 3, 4, 5, 6, 7] [1, 2, 3, 4, 5, 6] 7 1 [2, 3, 4, 5] 6 7 Cabeza: 10 Cola: [20, 30, 40, 50] P ['y', 't', 'h', 'o', 'n']

Unpacking en for loops

El unpacking en for hace el código más expresivo al nombrar cada componente:

# Unpacking de tuplas en for puntos = [(1, 2), (3, 4), (5, 6)] # ❌ Sin unpacking (menos claro) for punto in puntos: print(punto[0] + punto[1]) # ✅ Con unpacking (más claro) for x, y in puntos: print(f"Punto ({x}, {y}) → distancia desde origen: {(x**2 + y**2)**0.5:.2f}") # Unpacking con enumerate nombres = ["Ana", "Carlos", "Beatriz"] for indice, nombre in enumerate(nombres, start=1): print(f"{indice}. {nombre}") # Unpacking con zip claves = ["nombre", "edad", "ciudad"] valores = ["Ana", 28, "Madrid"] for clave, valor in zip(claves, valores): print(f"{clave}: {valor}") # Unpacking de pares de una lista pares = [("a", 1), ("b", 2), ("c", 3)] diccionario = {clave: valor for clave, valor in pares} print(diccionario) # {"a": 1, "b": 2, "c": 3}
Salida3 7 11 Punto (1, 2) → distancia desde origen: 2.24 Punto (3, 4) → distancia desde origen: 5.00 Punto (5, 6) → distancia desde origen: 7.81 1. Ana 2. Carlos 3. Beatriz nombre: Ana edad: 28 ciudad: Madrid {'a': 1, 'b': 2, 'c': 3}

Intercambio de variables

Una de las aplicaciones más elegantes del unpacking es intercambiar dos variables sin necesitar una variable temporal:

a = 10 b = 20 # ❌ Forma tradicional (otros lenguajes) # temp = a # a = b # b = temp # ✅ Forma pythónica — unpacking en acción a, b = b, a print(f"a={a}, b={b}") # a=20, b=10 # También funciona con cualquier número de variables x, y, z = 1, 2, 3 x, y, z = z, x, y # rotación print(x, y, z) # 3 1 2 # Desempaquetar múltiples valores de retorno def obtener_extremos(numeros): return min(numeros), max(numeros), sum(numeros) / len(numeros) datos = [4, 2, 8, 1, 6] minimo, maximo, promedio = obtener_extremos(datos) print(f"Min={minimo}, Max={maximo}, Promedio={promedio}")
Salidaa=20, b=10 3 1 2 Min=1, Max=8, Promedio=4.2
¿Cómo funciona el intercambio?

a, b = b, a funciona porque Python evalúa primero el lado derecho completo (creando la tupla (b, a) con los valores actuales) y luego realiza el unpacking a las variables de la izquierda. No hay ninguna magia — es evaluación de expresión más unpacking.

Practica

Cuatro ejercicios para dominar el unpacking en Python.