Descomprimir (ampliar i assignar a diverses variables) tuples i llistes a Python

Negocis

A Python, els elements d’una tupla o llista es poden ampliar i assignar a diverses variables. Això s’anomena desempaquetat de seqüències o assignació descomprimida.

Els detalls següents es descriuen aquí.

  • Descomprimir conceptes bàsics de tuples i llistes
  • Tuples niuades, llistats descomprimits
  • Desembalatge amb guions baixos:_
  • Desembalatge amb asteriscs:*

Consulteu l’article següent per obtenir informació sobre com utilitzar asteriscs per expandir i passar tuples, llistes i diccionaris com a arguments de funció.

Descomprimir conceptes bàsics de tuples i llistes

Quan les variables s’escriuen a la part esquerra, separades per comes, a cada variable se li assigna un element de la tupla o llista a la dreta. És el mateix tant per a tuples com per a llistes (els exemples següents estan escrits en forma de tuple).

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

Tingueu en compte que com que les tuples poden ometre claudàtors rodons, això es pot utilitzar per assignar diversos valors a diverses variables en una única línia de la manera següent.

a, b = 0, 1

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

Si el nombre de variables no coincideix amb el nombre d’elements, es produeix 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 nombre de variables és inferior al nombre d’elements, els elements restants es poden assignar com a llista afegint un asterisc al nom de la variable (vegeu més avall).

Tuples niuades, llistats descomprimits

Les tuples i llistes niuades també es poden desempaquetar. Si també voleu desempaquetar el contingut, afegiu la variable en un dels següents

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

Desempaquetat amb _guió baix_.

A Python, no només descomprimits, els valors que no són necessaris s’assignen convencionalment al guió baix (guió baix) _. No hi ha cap significat gramatical especial; simplement s’assignen a una variable anomenada _.

t = (0, 1, 2)

a, b, _ = t

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

Desembalatge amb asteriscs

Si el nombre de variables és inferior al nombre d’elements, un asterisc al nom de la variable farà que els elements s’assignin junts com a llista.

Aquesta sintaxi s’ha implementat des de Python 3 i no està disponible a Python 2.

Els elements s’assignen des del principi i el final a les variables sense asteriscs, i els elements restants s’assignen com una llista a les variables amb asteriscs.

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

Per exemple, si voleu assignar només els dos primers elements d’una tupla o llista a una variable, podeu utilitzar el guió baix anterior per a les parts que no són necessàries.

a, b, *_ = t

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

El mateix també es pot escriure de la següent manera

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

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

Només es pot adjuntar un asterisc. Si hi ha diverses variables marcades amb un asterisc, es produirà un error SyntaxError perquè no és possible determinar quants elements s’assignen a cada variable.

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

Tingueu en compte que fins i tot un únic element assignat a una variable marcada amb un asterisc s’assigna com a llista.

t = (0, 1, 2)

a, b, *c = t

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

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

Si no hi ha elements addicionals, s’assigna una llista buida.

a, b, c, *d = t

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