Desempaquetado en Python de una tupla o lista

Publicado el 12 septiembre 2022 por Daniel Rodríguez @analyticslane

En algunas ocasiones, como puede ser los valores que devuelve una función, nos podemos encontrar con una tupla, o lista, que contiene varios valores de los cuales solamente nos interesan unos pocos. Por lo que extraer solamente estos valores y quedarnos con los necesarios puede simplificar los posteriores análisis. Algo que se puede conseguir mediante el desempaquetado en Python de una tupla o lista. Una tarea más sencilla de lo que parece.

Desempaquetando en Python de una tupla

Supongamos que en una sesión de Python se tienen en la variable datos una tupla con tres valores. En el caso de que se desee extraer cada uno de estos valores a una variable diferente se puede conseguir seleccionado cada uno de ellos usando los índices y asignándoles a cada una de ellas. Aunque existe una opción más sencilla, el desempaquetado de la tupla. Algo que simplemente requiere escribir entre paréntesis, o corchetes, el nombre de tres variables y asignar a este la tupla. Lo que se puede ver en el siguiente código.

datos = ('Elemento 1', 'Elemento 2', 'Elemento 3')

(var1, var2, var3) = datos

print(var1)
print(var2)
print(var3)
Elemento 1
Elemento 2
Elemento 3

Un ejemplo en el que primero se crean una tupla con tres cadenas de texto y posteriormente se asigna cada una de estas cadenas a una variable. Lo que se puede comprobar sacando por pantalla cada una de las variables.

El número de variables tiene que ser igual al de elementos

A la hora de desempaquetar en Python de una tupla es necesario tener en cuenta que es necesario indicar tantas variables como elementos. En caso contrario se producirá un error, algo que se puede comprobar ejecutando el siguiente código.

(var1, var2) = datos
ValueError                                Traceback (most recent call last)
Input In [2], in <cell line: 1>()
----> 1 (var1, var2) = datos

ValueError: too many values to unpack (expected 2)

Produciendo un error que nos indica que hay demasiados valores para desempaquetar. Sucediendo algo similar en el caso contrario, cuando hay demasiados valores como sucede en el siguiente ejemplo.

(var1, var2, var3, var4) = datos
ValueError                                Traceback (most recent call last)
Input In [3], in <cell line: 1>()
----> 1 (var1, var2, var3, var4) = datos

ValueError: not enough values to unpack (expected 4, got 3)

Aunque en este caso el error generado es diferente, señalando que hay pocos valores para desempaquetar.

Uso de * para guardar valores en una tupla

Cuando se desconoce el número de elementos, o solamente se desean los primeros, se puede usar * antes de la última variable para indicar que el resto de los objetos de carguen en esta. Así el último elemento será una nueva tupla con todos los valores no asignados. En el siguiente trozo de código se puede ver el funcionamiento de este modificador.

(var1, *var2) = datos

print(var1)
print(var2)
Elemento 1
['Elemento 2', 'Elemento 3']

En los resultados se puede ver que los dos últimos valores se han cargado en una nueva lista.

Desempaquetando en Python de una lista

Lo que se ha visto hasta ahora para las tuplas aplica también para las listas sin necesidad de hacer ningún cambio. El siguiente código, donde datos es ahora una lista, funciona igual que los ejemplos anteriores.

datos = ['Elemento 1', 'Elemento 2', 'Elemento 3']

(var1, var2, var3) = datos

print(var1)
print(var2)
print(var3)
Elemento 1
Elemento 2
Elemento 3

Conclusiones

El proceso de desempaquetado en Python de una tupla o lista es una operación sencilla con la que se puede asignar el contenido de uno de estos objetos a unas variables. Haciendo que el código sea más fácil de leer al poder asignar un nombre significativo a cada una de las variables.

Imagen de Mediamodifier en Pixabay