Rozbaľovanie (rozbalenie a priradenie do viacerých premenných) kôpok a zoznamov v jazyku Python

obchodné

V jazyku Python je možné prvky tuple alebo zoznamu rozšíriť a priradiť viacerým premenným. Tento postup sa nazýva rozbalenie sekvencie alebo rozbalené priradenie.

Sú tu opísané tieto podrobnosti.

  • Základy rozbaľovania tuplov a zoznamov
  • Vložené zoznamy, rozbalené zoznamy
  • Rozbaľovanie pomocou podčiarkovníkov:_
  • Rozbaľovanie s hviezdičkami:*

Informácie o používaní hviezdičiek na rozbalenie a odovzdávanie kôpok, zoznamov a slovníkov ako argumentov funkcie nájdete v nasledujúcom článku.

Základy rozbaľovania tuplov a zoznamov

Ak sú premenné zapísané na ľavej strane a oddelené čiarkami, každej premennej je priradený prvok tuplu alebo zoznamu na pravej strane. Je to rovnaké pre tuple aj zoznamy (nasledujúce príklady sú zapísané vo forme tuple).

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šimnite si, že keďže tuples môžu vynechať okrúhle zátvorky, možno to použiť na priradenie viacerých hodnôt viacerým premenným na jednom riadku takto.

a, b = 0, 1

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

Ak sa počet premenných nezhoduje s počtom prvkov, nastane chyba.

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

Ak je počet premenných menší ako počet prvkov, zostávajúce prvky možno priradiť ako zoznam pridaním hviezdičky k názvu premennej (pozri nižšie).

Vložené zoznamy, rozbalené zoznamy

Vložené tuply a zoznamy možno tiež rozbaliť. Ak chcete rozbaliť aj obsah, uzavrite premennú do jedného z nasledujúcich symbolov

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

Rozbalené s _underscore_.

V jazyku Python sa nielen rozbalené hodnoty, ale aj hodnoty, ktoré nie sú potrebné, konvenčne priraďujú k podčiarkovníku (underscore) _. Nemajú žiadny špeciálny gramatický význam, jednoducho sa priradia do premennej s názvom _.

t = (0, 1, 2)

a, b, _ = t

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

Rozbaľovanie s hviezdičkami

Ak je počet premenných menší ako počet prvkov, hviezdička v názve premennej spôsobí, že prvky budú priradené spoločne ako zoznam.

Táto syntax je implementovaná od Pythonu 3 a v Pythone 2 nie je k dispozícii.

Prvky sú priradené od začiatku a od konca k premenným bez hviezdičiek a zvyšné prvky sú priradené ako zoznam k premenným s hviezdič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

Ak napríklad chcete do premennej priradiť len prvé dva prvky tuplu alebo zoznamu, môžete pre nepotrebné časti použiť vyššie uvedené podčiarknutie.

a, b, *_ = t

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

To isté sa dá zapísať aj takto

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

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

Môže byť pripojená len jedna hviezdička. Ak je hviezdičkou označených viac premenných, dôjde k chybe SyntaxError, pretože nie je možné určiť, koľko prvkov je priradených jednotlivým premenným.

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

Všimnite si, že aj jediný prvok priradený premennej označenej hviezdičkou je priradený ako zoznam.

t = (0, 1, 2)

a, b, *c = t

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

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

Ak nie sú žiadne ďalšie prvky, priradí sa prázdny zoznam.

a, b, c, *d = t

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