Fungua (kupanua na ugawanye kwa anuwai nyingi) nakala na orodha kwenye Python

Biashara

Katika Python, vipengee vya nakala au orodha vinaweza kupanuliwa na kupewa anuwai nyingi. Hii inaitwa upakiaji wa mlolongo au kazi isiyopakiwa.

Maelezo yafuatayo yanaelezwa hapa.

  • Kufungua misingi ya nakala na orodha
  • Nakala zilizoorodheshwa, tangazo ambazo hazijapakiwa
  • Kufungua kwa Underscores:_
  • Kufungua kwa nyota:*

Tazama makala ifuatayo kwa maelezo kuhusu kutumia nyota kupanua na kupitisha nakala, orodha, na kamusi kama hoja za utendakazi.

Kufungua misingi ya nakala na orodha

Vigezo vinapoandikwa kwenye upande wa kushoto, vikitenganishwa na koma, kila kigezo hupewa kipengele cha tuple au orodha iliyo upande wa kulia. Ni sawa kwa nakala na orodha zote mbili (mifano ifuatayo imeandikwa katika muundo wa 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

Kumbuka kwamba kwa kuwa nakala zinaweza kuacha mabano ya pande zote, hii inaweza kutumika kugawa thamani nyingi kwa viambishi vingi kwenye mstari mmoja kama ifuatavyo.

a, b = 0, 1

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

Ikiwa idadi ya vigezo hailingani na idadi ya vipengele, hitilafu hutokea.

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

Ikiwa idadi ya vigeu ni chini ya idadi ya vipengele, vipengele vilivyosalia vinaweza kugawiwa kama orodha kwa kuambatanisha kinyota kwa jina la kutofautisha (tazama hapa chini).

Nakala zilizoorodheshwa, tangazo ambazo hazijapakiwa

Nakala zilizoorodheshwa na orodha pia zinaweza kufunguliwa. Ikiwa unataka kufunua yaliyomo pia, ambatisha kutofautisha katika mojawapo ya yafuatayo

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

Imetolewa kwa _underscore_.

Katika Python, sio tu kufunguliwa, maadili ambayo hayahitajiki hupewa kikawaida kwa underscore (underscore) _. Hakuna maana maalum ya kisarufi; wamepewa kwa kigezo kiitwacho _.

t = (0, 1, 2)

a, b, _ = t

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

Kufungua kwa nyota

Ikiwa idadi ya vigeu ni chini ya idadi ya vipengele, nyota katika jina la kutofautisha itasababisha vipengele kugawiwa pamoja kama orodha.

Syntax hii imetekelezwa tangu Python 3 na haipatikani katika Python 2.

Vipengele vinapewa kutoka mwanzo na mwisho kwa vigezo bila nyota, na vipengele vilivyobaki vinawekwa kama orodha ya vigezo vilivyo na nyota.

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

Kwa mfano, ikiwa ungependa kugawa vipengele viwili vya kwanza vya tuple au kuorodhesha kwa kigezo, unaweza kutumia mstari wa chini hapo juu kwa sehemu ambazo hazihitajiki.

a, b, *_ = t

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

Vile vile vinaweza kuandikwa kama ifuatavyo

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

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

Kinyota kimoja tu kinaweza kuambatishwa. Ikiwa kuna vigeu vingi vilivyo na alama ya nyota, hitilafu ya SyntaxError itatokea kwa sababu haiwezekani kubainisha ni vipengele vingapi vimegawiwa kwa kila kigezo.

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

Kumbuka kuwa hata kipengele kimoja kilichopewa kigezo chenye alama ya nyota kimetolewa kama orodha.

t = (0, 1, 2)

a, b, *c = t

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

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

Ikiwa hakuna vipengele vya ziada, orodha tupu imepewa.

a, b, c, *d = t

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