Raspakirajte (proširite i dodijelite višestrukim varijablama) tuple i popise u Pythonu

Poslovanje

U Pythonu se elementi tuple ili popisa mogu proširiti i dodijeliti višestrukim varijablama. To se naziva raspakiranje sekvence ili nepakirano dodjeljivanje.

Ovdje su opisani sljedeći detalji.

  • Raspakivanje osnova torki i popisa
  • Ugniježđeni tuple, nepakirani oglasi
  • Raspakiravanje s podvlakama:_
  • Raspakiravanje sa zvjezdicama:*

Pogledajte sljedeći članak za informacije o korištenju zvjezdica za proširenje i prosljeđivanje torki, popisa i rječnika kao argumenata funkcije.

Raspakivanje osnova torki i popisa

Kada su varijable napisane na lijevoj strani, odvojene zarezima, svakoj varijabli dodjeljuje se element tuple ili popisa na desnoj strani. Isto je i za torke i za liste (sljedeći primjeri su napisani u obliku torki).

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

Imajte na umu da, budući da torovi mogu izostaviti okrugle zagrade, ovo se može koristiti za dodjelu više vrijednosti višestrukim varijablama u jednom retku kako slijedi.

a, b = 0, 1

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

Ako broj varijabli ne odgovara broju elemenata, dolazi do pogreške.

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

Ako je broj varijabli manji od broja elemenata, preostali elementi se mogu dodijeliti kao popis dodavanjem zvjezdice imenu varijable (vidi dolje).

Ugniježđeni tuple, nepakirani oglasi

Ugniježđeni tuple i popisi također se mogu raspakirati. Ako također želite raspakirati sadržaj, priložite varijablu u jednom od sljedećih

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

Raspakirano s _podvlakom_.

U Pythonu, ne samo raspakirane, vrijednosti koje nisu potrebne uobičajeno su dodijeljene podvlaci (podvlaci) _. Nema posebnog gramatičkog značenja; oni su jednostavno dodijeljeni varijabli pod nazivom _.

t = (0, 1, 2)

a, b, _ = t

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

Raspakiravanje sa zvjezdicama

Ako je broj varijabli manji od broja elemenata, zvjezdica u nazivu varijable će uzrokovati da se elementi dodijele zajedno kao popis.

Ova sintaksa je implementirana od Pythona 3 i nije dostupna u Pythonu 2.

Elementi se dodjeljuju od početka i kraja varijablama bez zvjezdica, a preostali elementi se dodjeljuju kao popis varijablama sa zvjezdicama.

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

Na primjer, ako želite varijabli dodijeliti samo prva dva elementa tuple ili popisa, možete koristiti gornju podvlaku za dijelove koji nisu potrebni.

a, b, *_ = t

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

Isto se može napisati i na sljedeći način

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

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

Može se pričvrstiti samo jedna zvjezdica. Ako postoji više varijabli označenih zvjezdicom, doći će do pogreške SyntaxError jer nije moguće odrediti koliko je elemenata dodijeljeno svakoj varijabli.

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

Imajte na umu da je čak i jedan element dodijeljen varijabli označenoj zvjezdicom dodijeljen kao popis.

t = (0, 1, 2)

a, b, *c = t

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

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

Ako nema dodatnih elemenata, dodjeljuje se prazna lista.

a, b, c, *d = t

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