Rozbalování (rozbalování a přiřazování do více proměnných) tuplů a seznamů v jazyce Python

Podnikání

V jazyce Python lze prvky tuple nebo seznamu rozbalit a přiřadit více proměnným. Tomuto postupu se říká rozbalování sekvencí nebo rozbalené přiřazení.

Zde jsou popsány následující podrobnosti.

  • Základy rozbalování tuplů a seznamů
  • Vnořené tuply, rozbalené výpisy
  • Rozbalování pomocí podtržítek:_
  • Rozbalování s hvězdičkami:*

Informace o používání hvězdiček k rozbalování a předávání tuplů, seznamů a slovníků jako argumentů funkcí najdete v následujícím článku.

Základy rozbalování tuplů a seznamů

Pokud jsou proměnné zapsány na levé straně a odděleny čárkami, je každé proměnné přiřazen prvek tuplu nebo seznamu na pravé straně. Je to stejné jak pro tuply, tak pro seznamy (následující příklady jsou zapsány ve formě tuplů).

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

Všimněte si, že vzhledem k tomu, že tuply mohou vynechat kulaté závorky, lze tuto funkci použít k přiřazení více hodnot více proměnným na jednom řádku takto.

a, b = 0, 1

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

Pokud se počet proměnných neshoduje s počtem prvků, dojde k chybě.

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

Pokud je počet proměnných menší než počet prvků, lze zbývající prvky přiřadit jako seznam připojením hvězdičky k názvu proměnné (viz níže).

Vnořené tuply, rozbalené výpisy

Vložené tuply a seznamy lze také rozbalit. Pokud chcete rozbalit i obsah, uzavřete proměnnou do jedné z následujících možností

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

Rozbaleno s _underscore_.

V jazyce Python se nejen rozbalují, ale hodnoty, které nejsou potřeba, se konvenčně přiřazují podtržítku (podtržítku) _. Nemají žádný zvláštní gramatický význam, jsou prostě přiřazeny do proměnné s názvem _.

t = (0, 1, 2)

a, b, _ = t

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

Rozbalování s hvězdičkami

Pokud je počet proměnných menší než počet prvků, hvězdička v názvu proměnné způsobí, že prvky budou přiřazeny společně jako seznam.

Tato syntaxe je zavedena od verze Python 3 a v Pythonu 2 není k dispozici.

Prvky jsou od začátku a od konce přiřazeny proměnným bez hvězdiček a zbývající prvky jsou přiřazeny jako seznam proměnným s hvězdičkami.

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

Pokud například chcete do proměnné přiřadit pouze první dva prvky tuplu nebo seznamu, můžete pro nepotřebné části použít výše uvedené podtržítko.

a, b, *_ = t

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

Totéž lze také zapsat takto

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

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

Lze připojit pouze jednu hvězdičku. Pokud je hvězdičkou označeno více proměnných, dojde k chybě SyntaxError, protože nelze určit, kolik prvků je přiřazeno každé proměnné.

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

Všimněte si, že i jediný prvek přiřazený proměnné označené hvězdičkou je přiřazen jako seznam.

t = (0, 1, 2)

a, b, *c = t

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

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

Pokud nejsou žádné další prvky, je přiřazen prázdný seznam.

a, b, c, *d = t

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