Python - 解压元组项


术语“拆包”是指解析各个变量中的元组项的过程。在 Python 中,括号是序列对象文字表示的默认分隔符。

以下声明元组的语句是相同的。

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

实施例1

要将元组项存储在各个变量中,请在赋值运算符左侧使用多个变量,如下例所示 -

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

它将产生以下输出-

x: 10 y: 20 z: 30

这就是元组在各个变量中的解包方式。

用于解包 T uple

在上面的例子中,赋值运算符左边的变量数量等于元组中的项目数量。如果数量不等于物品怎么办?

实施例2

如果变量的数量大于或小于元组的长度,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”,如下所示 -

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

它将产生以下输出-

x: y: [20, 30]

元组中的第一个值分配给“x”,其余项目分配给“y”,从而成为一个列表。

实施例3

在此示例中,元组包含 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”。

实施例4

如果我们将“*”添加到第一个变量会怎样?

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