在 Python 中使用 `for` 循环语句解包序列结构
Unpacking a sequence structure using a `for` loop statement in Python
我无法理解为什么无法在 for
循环的 header 行中解压缩以下内容。
鉴于:
>>> (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
循环的 header 行中用额外的括号括起原始 object 才能实现此输出?
鉴于任何序列都可以解包 [(1,2), 3]
在语法上作为列表序列是正确的,并且理论上应该能够分配给目标变量 (a,b),c
。那么为什么不是这种情况,为什么我必须用额外的括号将序列括起来?
非常感谢对此的一些澄清。
for
循环遍历列表条目,因此它第一次尝试将 (1,2)
分配给 (a,b),c
,这是行不通的。添加额外的括号将 (1,2),3
转换为一个元组,该元组是单个列表条目 ((1,2),3)
在 for
循环第一次迭代时分配给 (a,b),c
,这有效。
尝试:
for v in [(1,2),3]:
print v
你会看到 v
被分配 (1,2)
,然后 3
。
我无法理解为什么无法在 for
循环的 header 行中解压缩以下内容。
鉴于:
>>> (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
循环的 header 行中用额外的括号括起原始 object 才能实现此输出?
鉴于任何序列都可以解包 [(1,2), 3]
在语法上作为列表序列是正确的,并且理论上应该能够分配给目标变量 (a,b),c
。那么为什么不是这种情况,为什么我必须用额外的括号将序列括起来?
非常感谢对此的一些澄清。
for
循环遍历列表条目,因此它第一次尝试将 (1,2)
分配给 (a,b),c
,这是行不通的。添加额外的括号将 (1,2),3
转换为一个元组,该元组是单个列表条目 ((1,2),3)
在 for
循环第一次迭代时分配给 (a,b),c
,这有效。
尝试:
for v in [(1,2),3]:
print v
你会看到 v
被分配 (1,2)
,然后 3
。