Python - 解包元組項



解包元組項

“解包”是指將元組項解析到單個變數的過程。在 Python 中,括號是序列物件字面表示的預設分隔符。

以下宣告元組的語句是相同的。

>>> t1 = (x,y)
>>> t1 = x,y
>>> type (t1)
<class 'tuple'>

示例

要將元組項儲存到單個變數中,請在賦值運算子的左側使用多個變數,如下例所示:

tup1 = (10,20,30)
x, y, z = tup1
print ("x: ", x, "y: ", "z: ",z)

這將產生以下輸出

x: 10 y: 20 z: 30

這就是元組如何解包到單個變數中的方法。

在上面的示例中,賦值運算子左側的變數數量等於元組中的項數。如果數量不相等會怎樣?

解包元組時的 ValueError

如果變數的數量多於或少於元組的長度,Python 將引發 ValueError。

示例

tup1 = (10,20,30)
x, y = tup1
x, y, p, q = tup1

這將產生以下輸出

  x, y = tup1
  ^^^^
ValueError: too many values to unpack (expected 2)
  x, y, p, q = tup1
  ^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 3)

使用星號 (*) 解包元組項

在這種情況下,使用“*”符號進行解包。在“y”前面加上“*”,如下所示:

示例 1

tup1 = (10,20,30)
x, *y = tup1
print ("x: ", "y: ", y)

這將產生以下輸出

x: y: [20, 30]

元組中的第一個值被賦值給“x”,其餘項被賦值給“y”,它成為一個列表。

示例 2

在這個例子中,元組包含 6 個值,要解包的變數是 3 個。我們在第二個變數前面加上了“*”。

tup1 = (10,20,30, 40, 50, 60)
x, *y, z = tup1
print ("x: ",x, "y: ", y, "z: ", z)

這將產生以下輸出

x: 10 y: [20, 30, 40, 50] z: 60

在這裡,值首先解包到“x”和“z”,然後其餘值作為列表賦值給“y”。

示例 3

如果我們在第一個變數前面新增“*”會怎樣?

tup1 = (10,20,30, 40, 50, 60)
*x, y, z = tup1
print ("x: ",x, "y: ", y, "z: ", z)

這將產生以下輸出

x: [10, 20, 30, 40] y: 50 z: 60

同樣,元組的解包方式是:單個變數首先獲取值,其餘值留給列表“x”。

廣告