PyQuiz 31 - Tuple unpacking con * en Python | Quiz interactivo

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=5

Paso a paso

  1. a, *b, c = [1, 2, 3, 4, 5] — Python desempaqueta la lista. a toma el primer elemento: 1. c toma el último elemento: 5. *b captura todo lo que queda en el medio: [2, 3, 4].
  2. print(b) — Se imprime el valor de b, 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.

Ver el curso completo →

37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía

Compartir