解压缩元组项
术语 “unpacking” 是指在单个变量中解析 Tuples 项的过程。在 Python 中,括号是 sequence 对象的文字表示的默认分隔符。
以下用于声明 Tuples 的语句是相同的。
>>> 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
这就是 Tuples 在单个变量中解包的方式。
在上面的示例中,赋值运算符左侧的变量数等于元组中的项。如果数字不等于项目怎么办?
ValueError 时解包元组
如果变量的数量大于或小于 Tuples 的长度,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)
^^^^
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”。