Razpakiranje (razširitev in dodelitev več spremenljivkam) nizov in seznamov v Pythonu

Posel

V Pythonu lahko elemente tuple ali seznama razširimo in dodelimo več spremenljivkam. To se imenuje razpakiranje zaporedja ali razpakirano pripisovanje.

Tu so opisane naslednje podrobnosti.

  • Osnove razpakiranja tuplov in seznamov
  • Vloženi nizi, razpakirani seznami
  • Razpakiranje s podčrtankami:_
  • Razpakiranje z zvezdicami:*

Informacije o uporabi zvezdic za razširitev in posredovanje nizov, seznamov in slovarjev kot argumentov funkcij najdete v naslednjem članku.

Osnove razpakiranja tuplov in seznamov

Če so spremenljivke zapisane na levi strani in ločene z vejicami, je vsaki spremenljivki pripisan element dvojice ali seznama na desni strani. To velja tako za tuple kot za sezname (naslednji primeri so zapisani v obliki tuplov).

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

Upoštevajte, da lahko pri tuplih izpustite okrogle oklepaje, zato lahko to uporabite za dodelitev več vrednosti več spremenljivkam v eni vrstici, kot sledi.

a, b = 0, 1

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

Če se število spremenljivk ne ujema s številom elementov, pride do napake.

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

Če je število spremenljivk manjše od števila elementov, lahko preostale elemente dodelite kot seznam tako, da imenu spremenljivke dodate zvezdico (glejte spodaj).

Vloženi nizi, razpakirani seznami

Razpakirate lahko tudi vgnezdene skledice in sezname. Če želite razpakirati tudi vsebino, spremenljivko zaprite v eno od naslednjih oblik

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

Razpakirano s _underscore_.

V Pythonu, ne le razpakiranih, so vrednosti, ki niso potrebne, konvencionalno dodeljene podčrtanki (podčrtanki) _. Pri tem nimajo posebnega slovničnega pomena; preprosto so dodeljene spremenljivki z imenom _.

t = (0, 1, 2)

a, b, _ = t

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

Razpakiranje z zvezdicami

Če je število spremenljivk manjše od števila elementov, bo zvezdica v imenu spremenljivke povzročila, da bodo elementi dodeljeni skupaj kot seznam.

Ta sintaksa se uporablja od Pythona 3 in ni na voljo v Pythonu 2.

Elementi z začetka in konca so dodeljeni spremenljivkam brez zvezdic, preostali elementi pa so kot seznam dodeljeni spremenljivkam z zvezdicami.

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

Če želite na primer spremenljivki pripisati samo prva dva elementa iz seznama, lahko za nepotrebne dele spremenljivke uporabite zgornji podčrtaj.

a, b, *_ = t

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

Enako lahko zapišemo tudi na naslednji način

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

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

Dodana je lahko samo ena zvezdica. Če je z zvezdico označenih več spremenljivk, se pojavi napaka SyntaxError, ker ni mogoče določiti, koliko elementov je dodeljenih posamezni spremenljivki.

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

Upoštevajte, da je tudi en sam element, dodeljen spremenljivki, označeni z zvezdico, dodeljen kot seznam.

t = (0, 1, 2)

a, b, *c = t

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

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

Če ni dodatnih elementov, se dodeli prazen seznam.

a, b, c, *d = t

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