Python 解包元组列表

Python 解包元组列表,python,Python,我今天对以下代码感到惊讶: testcases=[([1,1,1,2,2] 对于测试用例中的a、b、c: 印刷品(a、b、c) 它打印: [1, 1, 1] 2 2 我预计会出现错误,并认为需要第二个循环来访问元组的元素。能给我解释一下它是怎么工作的吗?我不知道a、b和c是如何分配的。我使用了Python 3.6。干杯 让我们看看你有什么: testcases = [([1, 1, 1], 2, 2)] 这是一份清单。一号的。因此,testcases[0]是唯一的元素 所以这个代码: fo

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

testcases=[([1,1,1,2,2]
对于测试用例中的a、b、c:
印刷品(a、b、c)
它打印:

[1, 1, 1] 2 2

我预计会出现错误,并认为需要第二个循环来访问元组的元素。能给我解释一下它是怎么工作的吗?我不知道
a
b
c
是如何分配的。我使用了Python 3.6。干杯

让我们看看你有什么:

testcases = [([1, 1, 1], 2, 2)]
这是一份清单。一号的。因此,
testcases[0]
是唯一的元素

所以这个代码:

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

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

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

这就是您看到的打印内容。

让我们看看您拥有的内容:

testcases = [([1, 1, 1], 2, 2)]
这是一份清单。一号的。因此,
testcases[0]
是唯一的元素

所以这个代码:

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

所以解包:
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'>
tup=(“Elem1”、“Elem2”、“Elem3”、“Elem4”、“解包一个tuple”) >>>(unp1,*unp2,unp3)=tup >>>打印(*unp2) Elem2 Elem3 Elem4 >>>打印(unp1) Elem1 >>>打印(unp3) 解包元组 >>>打印(类型(unp1),类型(unp3)) >>>打印(类型(unp2))
在较低的层次上,我们创建了一个由5个元素组成的元组,然后在该元组上循环,从循环中得到的五个元素中取一个,并按顺序将它们分配给左侧的三个变量。
希望这有帮助。

在解包元组时,左侧的变量总数应等于给定元组中的值总数。 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'>
tup=(“Elem1”、“Elem2”、“Elem3”、“Elem4”、“解包一个tuple”) >>>(unp1,*unp2,unp3)=tup >>>打印(*unp2) Elem2 Elem3 Elem4 >>>打印(unp1) Elem1 >>>打印(unp3) 解包元组 >>>打印(类型(unp1),类型(unp3)) >>>打印(类型(unp2))
在较低的层次上,我们创建了一个由5个元素组成的元组,然后在该元组上循环,从循环中得到的五个元素中取一个,并按顺序将它们分配给左侧的三个变量。
希望这有帮助。

我使用了一个元素列表来简化问题。我不明白元组是如何被解包的。我以为a==([1,1,1],2,2)会发生并且是一个错误……但通常当我们在y中给出x时,x被定义为y中的某个东西,而不是y中的某个东西。我们怎么解释呢?但我想我现在明白了。首先获取列表中的一个元素,然后进行赋值。因为它是一个元组,所以它的工作方式与您期望的一样,并且分配了a、b、c。干杯我使用了一个元素列表来简化问题。我不明白元组是如何被解包的。我以为a==([1,1,1],2,2)会发生并且是一个错误……但通常当我们在y中给出x时,x被定义为y中的某个东西,而不是y中的某个东西。我们怎么解释呢?但我想我现在明白了。首先获取列表中的一个元素,然后进行赋值。因为它是一个元组,所以它的工作方式与您期望的一样,并且分配了a、b、c。干杯谢谢我只是感到惊讶,因为我没有考虑迭代中发生的一系列事情:1。列表的第一个元素取2。赋值发生如果赋值是直接发生的,那么只有
a
会被赋值给整个元组。希望你明白我的观点/困惑。我已经编辑了答案。希望你现在对发生的事情有个清楚的了解。谢谢。我只是感到惊讶,因为我没有考虑迭代中发生的一系列事情:1。列表的第一个元素取2。赋值发生如果赋值是直接发生的,那么只有
a
会被赋值给整个元组。希望你明白我的观点/困惑。我已经编辑了答案。希望你现在对正在发生的事情有一个清晰的认识。