Desempaquetado en Python: asterisco, intercambio y anidamiento
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Imagina que pides por internet un paquete con tres cosas: un libro, unos auriculares y una funda para el teléfono. Cuando llega la caja, la abres y pones cada cosa en su sitio. El libro va a la estantería, los auriculares al escritorio y la funda al teléfono.
El desempaquetado en Python funciona igual. Tomas una colección de valores (una tupla, una lista o cualquier iterable) y asignas cada valor a su propia variable en una sola línea limpia. No necesitas acceder a los elementos uno a uno con índices.
En esta lección aprenderás el desempaquetado básico, el elegante truco para intercambiar variables, las expresiones con asterisco que recogen varios elementos, el desempaquetado dentro de bucles y cómo desestructurar datos anidados.
¿Cómo funciona el desempaquetado básico?
Cuando tienes una tupla o una lista con varios valores, puedes asignar cada valor a una variable distinta en una sola línea. El número de variables de la izquierda debe coincidir con el número de elementos de la derecha.
10 20 30 red green blue
Sin desempaquetado, tendrías que acceder a cada elemento por su índice. El desempaquetado hace que el código sea más corto y mucho más fácil de leer.
point = (10, 20, 30)
x = point[0]
y = point[1]
z = point[2]
print(x, y, z)point = (10, 20, 30)
x, y, z = point
print(x, y, z)También puedes desempaquetar directamente en una asignación, sin guardar antes la tupla en una variable. Python crea la tupla automáticamente cuando separas los valores con comas.
Alice 25 Paris <class 'tuple'>
Cómo intercambiar variables en una línea
En la mayoría de los lenguajes de programación, intercambiar dos variables requiere una variable temporal. Con el desempaquetado de Python no hace falta. Puedes intercambiar valores en una sola línea elegante.
world hello
Esto funciona porque Python evalúa primero el lado derecho, empaqueta los valores en una tupla (b, a) y luego los desempaqueta en a, b. Todo ocurre de forma segura en un solo paso.
a = 1
b = 2
temp = a
a = b
b = temp
print(a, b) # 2 1a = 1
b = 2
a, b = b, a
print(a, b) # 2 1Puedes intercambiar tres o más variables de la misma forma. Python lo resuelve todo en un solo paso.
Before: a=1, b=2, c=3 After: a=2, b=3, c=1
¿Qué son las expresiones con asterisco (*rest)?
A veces no sabes exactamente cuántos elementos tiene una colección, o solo te interesan unos pocos. La expresión con asterisco (*variable) recoge en una lista todos los elementos que sobran.
1 [2, 3, 4, 5] [1, 2, 3, 4] 5
También puedes poner el asterisco en medio. Es ideal cuando te interesan el primer y el último elemento y quieres saltarte todo lo que hay entre ellos.
First: 95 Middle: [80, 75, 90, 85, 70] Last: 88
10 20 [] H ['e', 'l', 'l'] o
Cómo usar el desempaquetado en bucles for
El desempaquetado brilla dentro de los bucles for. Cuando recorres una lista de tuplas (o de listas), puedes desempaquetar cada elemento directamente en variables con nombre, en lugar de acceder a sus partes por índice.
Alice is 16 years old Bob is 15 years old Charlie is 17 years old
Este patrón se usa constantemente con enumerate() y dict.items(). Ambos devuelven tuplas, y el desempaquetado deja el código mucho más limpio.
0: apple 1: banana 2: cherry Alice -> 16 Bob -> 15 Charlie -> 17
Cómo desempaquetar estructuras de datos anidadas
El desempaquetado en Python puede bajar varios niveles. Si un valor de tu colección es a su vez una tupla o una lista, puedes desempaquetarlo con paréntesis anidados en el lado izquierdo.
Alice: 95, 87, 92
Esto funciona a cualquier profundidad. Incluso puedes combinar el desempaquetado anidado con expresiones con asterisco para tener la máxima flexibilidad.
Alice: average = 91.3 Bob: average = 84.3 Charlie: average = 85.3
Errores comunes al desempaquetar que debes evitar
El desempaquetado es intuitivo cuando te acostumbras a él, pero hay algunas trampas en las que suelen caer los principiantes.
Alice 10 20 42 <class 'list'>
Ejercicios de práctica
Desempaqueta la tupla point en tres variables: x, y y z. Luego imprímelas en una línea, separadas por espacios, con print(x, y, z).
Las variables first y second tienen los valores cambiados. Intercámbialos con la sintaxis de desempaquetado de Python (una línea, sin variable temporal) y luego imprime ambas.
Usa una expresión con asterisco para desempaquetar la lista numbers en head (el primer elemento) y tail (todo lo demás). Imprime ambos en líneas separadas.
¿Qué imprime este código? Piensa en qué recoge el asterisco y de qué tipo es el resultado.
a, *b, c = [1, 2, 3, 4, 5, 6]
print(a)
print(b)
print(c)Ejecuta el código para comprobar tu predicción.
Tienes una lista de registros de estudiantes. Cada registro es una tupla de la forma (name, (math_score, english_score)). Usa desempaquetado anidado en un bucle for para calcular e imprimir la nota media de cada estudiante.
Imprime cada línea con el formato Name: average, donde average es la media redondeada a 1 decimal con :.1f.