我无法理解为什么以下内容无法在 for
循环的标题行中解包。
鉴于:
>>> (a,b),c = (1,2),3
>>> a
1
>>> b
2
>>> c
3
为什么当我这样做时会收到错误?:
for (a,b),c in [(1,2),3]:
... print(a,b,c)
我知道如何让它工作,因为以下给出了我想要的结果:
>>> for (a,b),c in [((1,2),3)]:
... print(a,b,c)
1 2 3
但是为什么需要在 for
循环的标题行中使用额外的括号将原始对象括起来才能实现此输出?
鉴于任何序列都可以解包 [(1,2), 3]
作为列表序列在语法上是正确的,并且理论上应该能够分配给目标变量 ( a,b),c
。那么为什么情况并非如此,为什么我必须用额外的括号将序列括起来?
如果能澄清这一点,我们将不胜感激。
最佳答案
for
循环正在迭代列表条目,因此第一次尝试将 (1,2)
分配给 (a,b), c
,这是行不通的。添加额外的括号会将 (1,2),3
转换为一个元组,该元组是单个列表条目 ((1,2),3)
并分配给 (a,b),c
for
循环第一次迭代时有效。
尝试:
for v in [(1,2),3]:
print v
您将看到 v
被分配为 (1,2)
,然后是 3
。
关于python - 在Python中使用 `for`循环语句解压序列结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43307108/