Descomprimir (expandir y asignar a múltiples variables) tuplas y listas en Python

Negocio

En Python, los elementos de una tupla o lista pueden ser expandidos y asignados a múltiples variables. Esto se denomina desempaquetado de secuencias o asignación desempaquetada.

Aquí se describen los siguientes detalles.

  • Conceptos básicos de desempaquetado de tuplas y listas
  • Tuplas anidadas, listados sin empaquetar
  • Desembalaje con guiones bajos:_
  • Desembalaje con asteriscos:*

Consulte el siguiente artículo para obtener información sobre el uso de asteriscos para expandir y pasar tuplas, listas y diccionarios como argumentos de funciones.

Conceptos básicos de desempaquetado de tuplas y listas

Cuando las variables se escriben a la izquierda, separadas por comas, a cada variable se le asigna un elemento de la tupla o lista de la derecha. Es lo mismo para las tuplas y las listas (los siguientes ejemplos están escritos en forma de tupla).

t = (0, 1, 2)

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# 2

l = [0, 1, 2]

a, b, c = l

print(a)
print(b)
print(c)
# 0
# 1
# 2

Tenga en cuenta que, dado que las tuplas pueden omitir los paréntesis redondos, esto puede utilizarse para asignar varios valores a varias variables en una sola línea, como se indica a continuación.

a, b = 0, 1

print(a)
print(b)
# 0
# 1

Si el número de variables no coincide con el número de elementos, se produce un error.

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

# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)

Si el número de variables es menor que el número de elementos, los elementos restantes pueden asignarse como una lista añadiendo un asterisco al nombre de la variable (véase más adelante).

Tuplas anidadas, listados sin empaquetar

Las tuplas y listas anidadas también se pueden descomprimir. Si desea desempaquetar también el contenido, encierre la variable en uno de los siguientes elementos

  • ()
  • []
t = (0, 1, (2, 3, 4))

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)

print(type(c))
# <class 'tuple'>

a, b, (c, d, e) = t

print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4

Desembalado con _underscore_.

En Python, no sólo desempaquetados, los valores que no se necesitan se asignan convencionalmente al guión bajo (underscore) _. No hay ningún significado gramatical especial; simplemente se asignan a una variable llamada _.

t = (0, 1, 2)

a, b, _ = t

print(a)
print(b)
print(_)
# 0
# 1
# 2

Desembalaje con asteriscos

Si el número de variables es menor que el número de elementos, un asterisco en el nombre de la variable hará que los elementos se asignen juntos como una lista.

Esta sintaxis ha sido implementada desde Python 3 y no está disponible en Python 2.

Los elementos se asignan desde el principio y el final a las variables sin asteriscos, y los elementos restantes se asignan como una lista a las variables con asteriscos.

t = (0, 1, 2, 3, 4)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]

print(type(c))
# <class 'list'>

a, *b, c = t

print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4

*a, b, c = t

print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4

Por ejemplo, si quiere asignar a una variable sólo los dos primeros elementos de una tupla o lista, puede utilizar el guión bajo anterior para las partes que no se necesitan.

a, b, *_ = t

print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]

También se puede escribir de la siguiente manera

a, b = t[0], t[1]

print(a)
print(b)
# 0
# 1

Sólo se puede adjuntar un asterisco. Si hay varias variables marcadas con un asterisco, se producirá un error SyntaxError porque no es posible determinar cuántos elementos se asignan a cada variable.

# *a, b, *c = t
# SyntaxError: two starred expressions in assignment

Tenga en cuenta que incluso un solo elemento asignado a una variable marcada con un asterisco se asigna como una lista.

t = (0, 1, 2)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2]

print(type(c))
# <class 'list'>

Si no hay elementos adicionales, se asigna una lista vacía.

a, b, c, *d = t

print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []
Copied title and URL