Pythonis saab tupli või loendi elemente laiendada ja määrata mitmele muutujale. Seda nimetatakse järjestuse lahtipakkimiseks või lahtipakitud määramiseks.
Siin on kirjeldatud järgmisi üksikasju.
- Tuplite ja loetelude lahtipakkimise põhitõed
- Sisestatud tuplid, pakkimata loetelud
- Alamrubriikidega lahtipakkimine:
_
- Tähtedega lahtipakkimine:
*
Järgnevas artiklis leiate teavet tärnide kasutamise kohta tuplite, loendite ja sõnastike laiendamiseks ja edastamiseks funktsioonide argumentidena.
- RELATED:Nimekirjade, tuplite ja sõnastike laiendamine ja edastamine funktsioonide argumentidena Pythonis
Tuplite ja loetelude lahtipakkimise põhitõed
Kui muutujad kirjutatakse vasakule poole, eraldatuna komadega, määratakse igale muutujale üks element tuplist või loetelust paremal pool. See on sama nii tuplite kui ka loetelude puhul (järgmised näited on kirjutatud tupli kujul).
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
Pange tähele, et kuna tuplid võivad jätta ümarsulgud välja, saab seda kasutada mitme väärtuse määramiseks mitmele muutujale ühel real järgmiselt.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
Kui muutujate arv ei vasta elementide arvule, tekib viga.
# 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)
Kui muutujate arv on väiksem kui elementide arv, saab ülejäänud elemendid määrata loeteluna, lisades muutuja nimele tärni (vt allpool).
Sisestatud tuplid, pakkimata loetelud
Sisestatud tupleid ja loendeid saab samuti lahti pakkida. Kui soovite ka sisu lahti pakkida, siis ümbritsege muutuja ühte järgmistest muutujatest
()
[]
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
Välja pakitud koos _underscore_.
Pythonis, mitte ainult lahtipakitud, omistatakse väärtused, mida ei ole vaja, tavapäraselt allajoonega (underscore) _. Erilist grammatilist tähendust ei ole, need lihtsalt omistatakse muutujale nimega _.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
Tähtedega lahtipakkimine
Kui muutujate arv on väiksem kui elementide arv, siis tärniga muutuja nimes määratakse elemendid koos loeteluna.
See süntaks on rakendatud alates Python 3-st ja see ei ole Python 2-s saadaval.
Elemendid määratakse algusest ja lõpust alates muutujatele ilma tärnita ja ülejäänud elemendid määratakse loeteluna muutujatele tärniga.
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
Näiteks kui soovite määrata muutujale ainult kaks esimest elementi tuplist või loendist, võite kasutada ülaltoodud alajaotust nende osade jaoks, mida ei ole vaja.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
Sama võib kirjutada ka järgmiselt
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
Võib lisada ainult ühe tärni. Kui tärniga on märgitud mitu muutujat, tekib SyntaxError-viga, sest ei ole võimalik kindlaks teha, mitu elementi on igale muutujale määratud.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
Pange tähele, et isegi üks element, mis on määratud muutujale, mis on tähisega tähistatud, on määratud loeteluna.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
Kui lisaelemente ei ole, määratakse tühi nimekiri.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []