PyQuiz 31 – Tuple unpacking con * en Python

El reto
a, *b, c = [1, 2, 3, 4, 5]
print(b)¿Cuál es el resultado?
- a) [2, 3, 4]
- b) [1, 2, 3]
- c) 2
Piensa tu respuesta antes de seguir leyendo…
Concepto: Tuple unpacking con *
El desempaquetado extendido con * (asterisco) permite capturar múltiples elementos de una secuencia en una sola variable. Cuando escribes a, *b, c = secuencia, Python asigna el primer elemento a a, el último a c, y todo lo que queda en el medio a b como una lista.
La variable con * siempre recibe una lista, aunque capture cero, uno o muchos elementos. Puede aparecer en cualquier posición: al principio (*a, b, c), en el medio (a, *b, c) o al final (a, b, *c), pero solo puede haber un * por asignación.
# *c al final
a, b, *c = [1, 2, 3, 4, 5]
# a=1, b=2, c=[3, 4, 5]
# *a al principio
*a, b, c = [1, 2, 3, 4, 5]
# a=[1, 2, 3], b=4, c=5Paso a paso
a, *b, c = [1, 2, 3, 4, 5]— Python desempaqueta la lista.atoma el primer elemento:1.ctoma el último elemento:5.*bcaptura todo lo que queda en el medio:[2, 3, 4].print(b)— Se imprime el valor deb, que es la lista[2, 3, 4].
📥 Llévate el cheatsheet de Python (gratis)
PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.
Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.
Solución
Respuesta correcta: A) [2, 3, 4]
a=1, c=5 (primero y último). *b captura todo lo del medio: [2, 3, 4].
Sabías que…
El operador * en desempaquetado también funciona para ignorar elementos que no te interesan, usando la convención _:
primero, *_, ultimo = [10, 20, 30, 40, 50]
print(primero) # 10
print(ultimo) # 50
# Los elementos del medio se descartan en _
# También funciona con strings:
primera, *resto = 'Python'
print(primera) # 'P'
print(resto) # ['y', 't', 'h', 'o', 'n']Prueba tú mismo
¿Qué valor tendrá c después de ejecutar *a, b, c = range(6)? ¿Y cuántos elementos tendrá a?
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Tuplas en Python
¿Quieres aprender Python en orden, no a saltos?
Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.
37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía
