I-unpack (palawakin at italaga sa maraming variable) ang mga tuple at listahan sa Python

Negosyo

Sa Python, ang mga elemento ng isang tuple o listahan ay maaaring palawakin at italaga sa maraming variable. Ito ay tinatawag na sequence unpacking o unpacked assignment.

Ang mga sumusunod na detalye ay inilarawan dito.

  • Pag-unpack ng mga pangunahing kaalaman sa mga tuple at listahan
  • Mga nested tuple, mga naka-unpack na listahan
  • Pag-unpack gamit ang Underscore:_
  • Pag-unpack gamit ang mga asterisk:*

Tingnan ang sumusunod na artikulo para sa impormasyon sa paggamit ng mga asterisk upang palawakin at ipasa ang mga tuple, listahan, at diksyunaryo bilang mga argumento ng function.

Pag-unpack ng mga pangunahing kaalaman sa mga tuple at listahan

Kapag ang mga variable ay nakasulat sa kaliwang bahagi, na pinaghihiwalay ng mga kuwit, ang bawat variable ay nakatalaga ng isang elemento ng tuple o listahan sa kanang bahagi. Pareho ito para sa parehong mga tuple at mga listahan (ang mga sumusunod na halimbawa ay nakasulat sa anyong 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

Tandaan na dahil ang mga tuple ay maaaring mag-alis ng mga round bracket, maaari itong magamit upang magtalaga ng maraming mga halaga sa maraming mga variable sa isang linya tulad ng sumusunod.

a, b = 0, 1

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

Kung ang bilang ng mga variable ay hindi tumutugma sa bilang ng mga elemento, isang error ang magaganap.

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

Kung ang bilang ng mga variable ay mas mababa sa bilang ng mga elemento, ang natitirang mga elemento ay maaaring italaga bilang isang listahan sa pamamagitan ng pagdaragdag ng isang asterisk sa pangalan ng variable (tingnan sa ibaba).

Mga nested tuple, mga naka-unpack na listahan

Maaari ding i-unpack ang mga nested tuple at listahan. Kung gusto mo ring i-unpack ang mga nilalaman, ilakip ang variable sa isa sa mga sumusunod

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

Binuksan ng _underscore_.

Sa Python, hindi lamang na-unpack, ang mga halagang hindi kailangan ay karaniwang itinalaga sa underscore (underscore) _. Walang espesyal na kahulugang gramatikal; ang mga ito ay itinalaga lamang sa isang variable na pinangalanang _.

t = (0, 1, 2)

a, b, _ = t

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

Pag-unpack gamit ang mga asterisk

Kung ang bilang ng mga variable ay mas mababa sa bilang ng mga elemento, ang isang asterisk sa pangalan ng variable ay magiging sanhi ng mga elemento na italaga nang magkasama bilang isang listahan.

Ang syntax na ito ay ipinatupad mula noong Python 3 at hindi magagamit sa Python 2.

Ang mga elemento ay itinalaga mula sa simula at sa dulo sa mga variable na walang mga asterisk, at ang natitirang mga elemento ay itinalaga bilang isang listahan sa mga variable na may mga asterisk.

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

Halimbawa, kung gusto mong italaga lang ang unang dalawang elemento ng isang tuple o listahan sa isang variable, maaari mong gamitin ang underscore sa itaas para sa mga bahaging hindi kailangan.

a, b, *_ = t

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

Ang parehong ay maaari ding isulat bilang mga sumusunod

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

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

Isang asterisk lamang ang maaaring ikabit. Kung maraming variable na minarkahan ng asterisk, magreresulta ang SyntaxError error dahil hindi posibleng matukoy kung ilang elemento ang itinalaga sa bawat variable.

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

Tandaan na kahit isang elementong itinalaga sa isang variable na may markang asterisk ay itinalaga bilang isang listahan.

t = (0, 1, 2)

a, b, *c = t

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

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

Kung walang mga karagdagang elemento, isang walang laman na listahan ang itatalaga.

a, b, c, *d = t

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