正在解压缩元组列表



我今天对以下代码感到惊讶:

testcases = [([1, 1, 1], 2, 2)]
for a, b, c in testcases:
print(a, b, c)

它打印:

[1, 1, 1] 2 2

我预计会出现错误,并认为我们需要第二个循环来获取元组的元素。enyone能向我解释一下它是如何工作的吗?我不知道abc是如何分配的。我使用了Python 3.6。干杯

让我们看看您有什么:

testcases = [([1, 1, 1], 2, 2)]

这是一个列表。一号的。所以testcases[0]是唯一存在的元素

所以这个代码:

for a, b, c in testcases:
pass

是一个长度为1的循环。因此,每次通过循环(这只是一次(,您都会得到元素:([1, 1, 1], 2, 2),它是tuple。三号的。

所以拆包:a,b,c = testcases[0]给出:

a == [1, 1, 1]
b == 2
c == 2

这就是你看到的印刷品。

在元组的拆包过程中,左侧的变量总数应等于给定元组中的值总数。Python提供了为任意长度的元组解包传递可选参数(*参数(的语法。所有值将按照其规范的顺序分配给每个变量,所有剩余值将分配给*参数。例如,

>>> tup = ("Elem1", "Elem2","Elem3","Elem4","Unpacking a tuple")
>>> (unp1,*unp2, unp3) = tup
>>> print(*unp2)
Elem2 Elem3 Elem4
>>> print(unp1)
Elem1
>>> print(unp3)
Unpacking a tuple
>>> print(type(unp1),type(unp3))
<class 'str'> <class 'str'>
>>> print(type(unp2))
<class 'list'>

在较低级别上,我们正在创建一个由5个元素组成的元组,然后在该元组上循环,并从循环中获得五个项目中的每一个,并将它们按顺序分配给左手边的三个变量。希望这能有所帮助。

最新更新