python - 在Python中使用 `for`循环语句解压序列结构

标签 python for-loop tuples iterable-unpacking

我无法理解为什么以下内容无法在 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/

相关文章:

json - 二郎 : Tuple List into JSON

python - string.join 使用元组或列表更快吗?

swift - 如何在元组上定义后缀运算符?

Python __str__ - 它可以有歧义吗?

Python - 关于散列和 `None` 的问题

Python索引错误: list index out of range when using a list as an iterable

arrays - 在 Swift 2.0 中有没有一种方法可以从数组的某个索引开始一个 tuple-for-loop?

python - 使用 groupby 创建新数据框

javascript - 检查两个字符串是否在旋转方向上彼此相等

c - 使用 'for' 并将指针作为循环变量时的无限循环