W3docs

Asignar Múltiples Valores

Aprende a asignar múltiples valores en Python: desempaquetado de tuplas, un valor a varias variables, asignación con asterisco y errores comunes con ejemplos.

Asignar múltiples valores en Python

Python te permite asignar valores a varias variables en una sola instrucción. Esto cubre cuatro patrones comunes que encontrarás en código real:

  1. Asignación múltiple — distintos valores a distintas variables en una sola línea.
  2. Asignación encadenada — el mismo valor a varias variables a la vez.
  3. Desempaquetado de iterables — extraer elementos de una lista, tupla o cualquier iterable.
  4. Asignación con asterisco — recoger el "resto" de longitud variable en una lista.

Cada patrón se explica a continuación con ejemplos ejecutables y los errores que debes vigilar.

Asignación múltiple (desempaquetado de tuplas)

La forma más común utiliza una lista de nombres separados por comas a la izquierda y una lista de valores correspondiente a la derecha:

variable1, variable2, variable3 = value1, value2, value3

Python empaqueta el lado derecho en una tupla temporal y luego la desempaqueta en los nombres de la izquierda, de izquierda a derecha. El número de nombres y valores debe coincidir exactamente; si no coincide, Python lanza un ValueError.

Asignar tres variables de distintos tipos en una sola línea:

python— editable, runs on the server

Salida:

Python
3.7
True

Esto es equivalente a escribir tres instrucciones de asignación separadas, pero es más conciso y deja clara la relación entre los nombres de un vistazo.

Intercambiar variables

Dado que Python evalúa todo el lado derecho antes de realizar cualquier asignación, puedes intercambiar dos variables sin necesidad de una temporal:

x = 5
y = 10

# Before swapping
print("Before swapping")
print("x =", x)
print("y =", y)

# Swap in one line — no temp variable needed
x, y = y, x

# After swapping
print("After swapping")
print("x =", x)
print("y =", y)

Salida:

Before swapping
x = 5
y = 10
After swapping
x = 10
y = 5

En la mayoría de los otros lenguajes, este intercambio requiere una tercera variable temporal. La semántica de empaquetado de tuplas de Python hace que la instrucción de una sola línea sea segura.

ValueError: discordancia en el número de elementos

Si el número de valores no coincide con el número de nombres, Python lanza un ValueError de inmediato:

a, b = 1, 2, 3        # too many values
# ValueError: too many values to unpack (expected 2)

a, b, c = 1, 2        # too few values
# ValueError: not enough values to unpack (expected 3, got 2)

Cuando veas este error, cuenta los nombres a la izquierda y los valores a la derecha — deben ser iguales, o necesitas la asignación con asterisco (ver más abajo).

Asignación encadenada (un valor, varias variables)

Para dar a varias variables el mismo valor inicial, encadena los operadores de asignación:

x = y = z = 0
print(x, y, z)

Salida:

0 0 0

Python evalúa 0 una sola vez y enlaza los tres nombres al mismo objeto. Esto funciona correctamente con objetos inmutables (enteros, strings, tuplas). Ten cuidado con los valores mutables predeterminados — los tres nombres apuntan al mismo objeto lista:

# Pitfall: shared mutable object
a = b = c = []
a.append(1)
print(b)   # [1]  — b is the same list, not a copy!

Si necesitas listas independientes, usa una comprensión de lista o asignaciones separadas:

a, b, c = [], [], []

Desempaquetar un iterable

Puedes desempaquetar cualquier iterable — una lista, tupla, string, range u otro — directamente en variables:

a, b, c = [10, 20, 30]
print(a, b, c)

Salida:

10 20 30

Este es el mismo mecanismo que la asignación múltiple; a Python no le importa si el lado derecho es una tupla literal o una variable lista. Por ejemplo, desempaquetar una tupla funciona de forma idéntica:

coords = (51.5, -0.1)
lat, lon = coords
print(lat)   # 51.5
print(lon)   # -0.1

Consulta el capítulo Desempaquetar tuplas para una explicación más detallada de este patrón.

Asignación con asterisco (desempaquetado extendido)

Cuando no sabes cuántos elementos contiene un iterable, antepón * a un nombre para recoger los elementos restantes en una lista:

first, *rest = [10, 20, 30, 40]
print(first)   # 10
print(rest)    # [20, 30, 40]

El nombre con asterisco puede aparecer en cualquier posición de la lista de destino — al inicio, en el medio o al final:

first, *middle, last = [10, 20, 30, 40]
print(first)    # 10
print(middle)   # [20, 30]
print(last)     # 40
*head, second_last, last = range(1, 6)
print(head)         # [1, 2, 3]
print(second_last)  # 4
print(last)         # 5

Reglas para la asignación con asterisco:

  • Solo se permite un nombre con asterisco por instrucción.
  • El nombre con asterisco siempre recoge una list, incluso cuando coincide con cero o un elemento.
  • Todos los nombres sin asterisco deben coincidir exactamente con un elemento.

Cuándo usar cada patrón

PatrónCaso de uso típico
a, b = 1, 2Devolver múltiples valores de una función; intercambiar dos variables
x = y = z = 0Inicializar un grupo de contadores o indicadores al mismo valor
a, b, c = my_listDesempaquetar una secuencia de longitud fija en nombres significativos
first, *rest = itemsSeparar el inicio del resto en una lista de longitud desconocida

Temas relacionados

Práctica

Práctica
¿Cuáles de las siguientes son formas válidas de asignar múltiples valores en Python?
¿Cuáles de las siguientes son formas válidas de asignar múltiples valores en Python?
Was this page helpful?