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”。

广告