元组如何在 for 循环中解包?

新手上路,请多包涵

我偶然发现了以下代码:

 for i, a in enumerate(attributes):
   labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W))
   e = Entry(root)
   e.grid(column=1, row=i)
   entries.append(e)
   entries[i].insert(INSERT,"text to insert")

我不明白 i, a 位,并且搜索有关 for 的信息没有产生任何有用的结果。当我尝试使用代码进行试验时,出现错误:

ValueError:需要超过 1 个值才能解包

有谁知道它的作用,或者与它相关的更具体的术语,我可以谷歌了解更多信息?

原文由 Talisin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 804
2 个回答

你可以谷歌 “元组拆包” 。这可以在 Python 的各个地方使用。最简单的是赋值:

 >>> x = (1,2)
>>> a, b = x
>>> a
1
>>> b
2

在 for 循环中,它的工作方式类似。如果iterable的每个元素都是a tuple ,那么你可以指定两个变量,循环中的每个元素都会被解包为两个。

 >>> x = [(1,2), (3,4), (5,6)]
>>> for item in x:
...     print "A tuple", item
A tuple (1, 2)
A tuple (3, 4)
A tuple (5, 6)
>>> for a, b in x:
...     print "First", a, "then", b
First 1 then 2
First 3 then 4
First 5 then 6

enumerate 函数创建一个可迭代的元组,因此可以这样使用。

原文由 BrenBarn 发布,翻译遵循 CC BY-SA 4.0 许可协议

Enumerate 基本上为您提供了一个在 for 循环中使用的索引。所以:

 for i,a in enumerate([4, 5, 6, 7]):
    print(i, ": ", a)

会打印:

 0: 4
1: 5
2: 6
3: 7

原文由 nathancahill 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题