Распакуйце (разгарніце і прысвойце некалькім зменным) картэжы і спісы ў Python

Бізнэс

У Python элементы кортэжа або спісу могуць быць пашыраны і прызначаны для некалькіх зменных. Гэта называецца распакаванне паслядоўнасці або распакаванае прызначэнне.

Наступныя падрабязнасці апісаны тут.

  • Распакоўванне асноў картэжаў і спісаў
  • Укладзеныя картэжы, распакаваныя спісы
  • Распакоўка з дапамогай падкрэслення:_
  • Распакоўка з зорачкамі:*

Глядзіце наступны артыкул для інфармацыі аб выкарыстанні зорачак для пашырэння і перадачы картэжаў, спісаў і слоўнікаў у якасці аргументаў функцыі.

Распакоўванне асноў картэжаў і спісаў

Калі зменныя запісваюцца з левага боку, праз коскі, кожнай зменнай прысвойваецца элемент картэжа або спісу з правага боку. Гэта аднолькава як для картэжаў, так і для спісаў (наступныя прыклады напісаны ў выглядзе картэжа).

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

Звярніце ўвагу, што, паколькі ў картэжах можна апускаць круглыя ​​дужкі, гэта можна выкарыстоўваць для прысваення некалькіх значэнняў некалькім зменным у адным радку наступным чынам.

a, b = 0, 1

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

Калі колькасць зменных не адпавядае колькасці элементаў, узнікае памылка.

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

Калі колькасць зменных меншая за колькасць элементаў, астатнія элементы можна прызначыць у выглядзе спісу, дадаўшы зорачку да назвы зменнай (гл. ніжэй).

Укладзеныя картэжы, распакаваныя спісы

Укладзеныя картэжы і спісы таксама можна распакаваць. Калі вы таксама хочаце распакаваць змесціва, уключыце зменную ў адно з наступных

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

Распакавана з _падкрэсленнем_.

У Python, не толькі распакаваныя, значэнні, якія не патрэбныя, умоўна прысвойваюцца знаку падкрэслення (падкрэслення) _. Асаблівага граматычнага значэння няма; яны проста прысвойваюцца зменнай з імем _.

t = (0, 1, 2)

a, b, _ = t

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

Распакоўка з зорачкамі

Калі колькасць зменных меншая за колькасць элементаў, зорачка ў назве зменнай прывядзе да таго, што элементы будуць прысвоены разам у выглядзе спісу.

Гэты сінтаксіс быў рэалізаваны з Python 3 і недаступны ў Python 2.

Элементы прысвойваюцца ад пачатку і канца зменным без зорачак, а астатнія элементы прысвойваюцца ў выглядзе спісу зменным з зорачкамі.

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

Напрыклад, калі вы хочаце прысвоіць зменнай толькі першыя два элементы картэжа або спісу, вы можаце выкарыстоўваць прыведзенае вышэй падкрэсліванне для частак, якія не патрэбныя.

a, b, *_ = t

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

Тое ж самае можна запісаць і наступным чынам

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

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

Можна прымацаваць толькі адну зорачку. Калі ёсць некалькі зменных, пазначаных зорачкай, прывядзе да памылкі SyntaxError, таму што немагчыма вызначыць, колькі элементаў прысвоена кожнай зменнай.

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

Звярніце ўвагу, што нават адзін элемент, прызначаны зменнай, пазначанай зорачкай, прызначаецца ў якасці спісу.

t = (0, 1, 2)

a, b, *c = t

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

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

Калі лішніх элементаў няма, прысвойваецца пусты спіс.

a, b, c, *d = t

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