Descomprimir (expandir e asignar a varias variables) tuplas e listas en Python

Negocios

En Python, os elementos dunha tupla ou lista pódense ampliar e asignar a varias variables. Isto chámase desempaquetado de secuencias ou asignación desempaquetado.

Aquí descríbense os seguintes detalles.

  • Descomprimir conceptos básicos de tuplas e listas
  • Tuplas anidadas, listas desempaquetadas
  • Descomprimir con guións baixos:_
  • Desembalaxe con asteriscos:*

Consulte o seguinte artigo para obter información sobre como usar asteriscos para expandir e pasar tuplas, listas e dicionarios como argumentos de función.

Descomprimir conceptos básicos de tuplas e listas

Cando as variables se escriben no lado esquerdo, separadas por comas, a cada variable asígnaselle un elemento da tupla ou lista no lado dereito. É o mesmo tanto para as tuplas como para as listas (os seguintes exemplos están escritos en forma de tuplas).

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

Teña en conta que, dado que as tuplas poden omitir corchetes, pódese usar para asignar varios valores a varias variables nunha única liña do seguinte xeito.

a, b = 0, 1

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

Se o número de variables non coincide co número de elementos, prodúcese un erro.

# 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)

Se o número de variables é menor que o número de elementos, os elementos restantes pódense asignar como unha lista engadindo un asterisco ao nome da variable (ver máis abaixo).

Tuplas anidadas, listas desempaquetadas

Tamén se poden desempaquetar as tuplas e listas aniñadas. Se tamén quere desempaquetar o contido, inclúa a variable nun dos seguintes

  • ()
  • []
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

Desempaquetado con _guión baixo_.

En Python, non só desempaquetado, os valores que non son necesarios asígnanse convencionalmente ao guión baixo (subliñado) _. Non hai un significado gramatical especial; simplemente asígnanse a unha variable chamada _.

t = (0, 1, 2)

a, b, _ = t

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

Desembalaxe con asteriscos

Se o número de variables é menor que o número de elementos, un asterisco no nome da variable fará que os elementos se asignen xuntos como unha lista.

Esta sintaxe implementouse desde Python 3 e non está dispoñible en Python 2.

Os elementos asígnanse desde o principio e o final ás variables sen asteriscos, e os elementos restantes asígnanse como unha lista ás 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 exemplo, se quere asignar só os dous primeiros elementos dunha tupla ou lista a unha variable, pode usar o guión baixo para as partes que non son necesarias.

a, b, *_ = t

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

O mesmo tamén se pode escribir do seguinte xeito

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

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

Só se pode anexar un asterisco. Se hai varias variables marcadas cun asterisco, producirase un erro SyntaxError porque non é posible determinar cantos elementos están asignados a cada variable.

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

Teña en conta que ata un único elemento asignado a unha variable marcada cun asterisco se asigna como lista.

t = (0, 1, 2)

a, b, *c = t

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

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

Se non hai elementos adicionais, asígnase unha lista baleira.

a, b, c, *d = t

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