元组如何解压缩为循环?

我偶然发现了以下代码:

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个值才能解压缩

有人知道它是做什么的吗,或者一个更具体的术语,我可以谷歌一下了解更多?

234333 次浏览

你可以在谷歌上搜索 “元组解包”。这可以在 Python 的不同地方使用。最简单的是在作业中:

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

在 for 循环中,它的工作原理类似。如果迭代的每个元素都是 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函数创建一个可迭代的元组,因此可以这样使用它。

enumerate函数返回一个生成器对象,在每次迭代中,生成一个元组,其中包含元素的索引(i) ,默认情况下从 0开始编号,再加上元素本身(a) ,for循环方便地允许您访问这些生成的元组的两个字段并为它们分配变量名。

枚举基本上为您提供了一个在 for 循环中使用的索引:

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

将印刷:

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

以这段代码为例:

elements = ['a', 'b', 'c', 'd', 'e']
index = 0


for element in elements:
print element, index
index += 1

你循环遍历列表并存储一个索引变量。 enumerate()做同样的事情,但是更简洁:

elements = ['a', 'b', 'c', 'd', 'e']


for index, element in enumerate(elements):
print element, index

index, element符号是必需的,因为 enumerate返回一个元组((1, 'a')(2, 'b')、 ...) ,它被解压缩成两个不同的变量。

[i for i in enumerate(['a','b','c'])]

结果:

[(0, 'a'), (1, 'b'), (2, 'c')]

简而言之,在 for 循环中从列表中解压缩元组是可行的。 枚举()使用当前索引和整个当前项(如(0,(‘ bob’,3)))创建元组

我创建了一些测试代码来演示这一点:

    list = [('bob', 3), ('alice', 0), ('john', 5), ('chris', 4), ('alex', 2)]


print("Displaying Enumerated List")
for name, num in enumerate(list):
print("{0}: {1}".format(name, num))


print("Display Normal Iteration though List")
for name, num in list:
print("{0}: {1}".format(name, num))

Tuple 解包的简单性可能是我最喜欢 Python: d 的地方之一

您可以将 for index,value方法与使用 ( )直接拆包元组相结合。当您希望在循环中设置几个相关的值时,这非常有用,这些值可以在没有中间元组变量或字典的情况下表示,例如。

users = [
('alice', 'alice@example.com', 'dog'),
('bob', 'bob@example.com', 'cat'),
('fred', 'fred@example.com', 'parrot'),
]


for index, (name, addr, pet) in enumerate(users):
print(index, name, addr, pet)

指纹

0 alice alice@example.com dog
1 bob bob@example.com cat
2 fred fred@example.com parrot
let's get it through with an example:
list = [chips, drinks, and, some, coding]
i = 0
while i < len(list):
               

if i % 2 != 0:
print(i)
i+=1
output:[drinks,some]


now using EMUNERATE fuction:(precise)
list = [chips, drinks, and, coding]
for index,items in enumerate(list):
            

print(index,":",items)
OUTPUT:   0:drinks
1:chips
2:drinks
3:and
4:coding