Tupelek és listák kicsomagolása (kibontása és hozzárendelése több változóhoz) Pythonban

Üzleti

A Pythonban egy tuple vagy lista elemei kibővíthetők és több változóhoz rendelhetők. Ezt nevezzük szekvencia kicsomagolásnak vagy kicsomagolt hozzárendelésnek.

A következő részleteket ismertetjük.

  • Tupelek és listák kicsomagolásának alapjai
  • Beágyazott tuplik, kicsomagolt listák
  • Kicsomagolás aláhúzásokkal:_
  • Kicsomagolás csillagokkal:*

A következő cikkben olvashat a csillagok használatáról, amelyekkel tuplikat, listákat és szótárakat bővíthet és adhat át függvényargumentumként.

Tupelek és listák kicsomagolásának alapjai

Ha a változókat a bal oldalon vesszővel elválasztva írjuk, akkor minden változóhoz a jobb oldalon lévő tuple vagy lista egy-egy elemét rendeljük. Ez mind a tuple-ok, mind a listák esetében ugyanaz (a következő példák tuple formában vannak leírva).

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

Megjegyezzük, hogy mivel a tuple-ek elhagyhatják a kerek zárójeleket, ez arra is használható, hogy egyetlen sorban több változóhoz több értéket rendeljünk, az alábbiak szerint.

a, b = 0, 1

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

Ha a változók száma nem egyezik meg az elemek számával, hiba lép fel.

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

Ha a változók száma kevesebb, mint az elemek száma, a fennmaradó elemeket listaként lehet hozzárendelni, ha a változó nevéhez csillagot csatolunk (lásd alább).

Beágyazott tuplik, kicsomagolt listák

A beágyazott tuple-ok és listák is kicsomagolhatók. Ha a tartalmát is ki akarja csomagolni, akkor a változót a következők valamelyikébe zárja be

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

Kicsomagolva _underscore_.

Pythonban nem csak kicsomagolva, a nem szükséges értékeket hagyományosan az aláhúzással (underscore) _ jelölik. Nincs különösebb nyelvtani jelentése; egyszerűen egy _ nevű változóhoz rendeljük őket.

t = (0, 1, 2)

a, b, _ = t

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

Kicsomagolás csillagokkal

Ha a változók száma kevesebb, mint az elemek száma, akkor a változó nevében lévő csillag azt eredményezi, hogy az elemek egy listában lesznek hozzárendelve.

Ez a szintaxis a Python 3 óta létezik, és a Python 2-ben nem érhető el.

Az elemeket az elejétől és a végétől a csillag nélküli változókhoz rendeljük, a fennmaradó elemeket pedig listaként a csillaggal jelölt változókhoz.

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

Ha például egy tuple vagy lista csak az első két elemét szeretné hozzárendelni egy változóhoz, akkor a fenti aláhúzást használhatja a nem szükséges részekre.

a, b, *_ = t

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

Ugyanez a következőképpen is leírható

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

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

Csak egy csillagot lehet csatolni. Ha több csillaggal jelölt változó van, SyntaxError hiba keletkezik, mert nem lehet meghatározni, hogy hány elem van hozzárendelve az egyes változókhoz.

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

Vegye figyelembe, hogy a csillaggal jelölt változóhoz rendelt egyetlen elem is listaként van hozzárendelve.

t = (0, 1, 2)

a, b, *c = t

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

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

Ha nincsenek extra elemek, akkor egy üres lista kerül hozzárendelésre.

a, b, c, *d = t

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