我偶然发现了一个无法解释的解包问题。
这有效:
tuples = [('Jhon', 1), ('Jane', 2)]
for name, score in tuples:
...
这也有效
for id, entry in enumerate(tuples):
name, score = entry
...
但这不起作用:
for id, name, score in enumerate(tuples):
...
抛出ValueError: need more than 2 values to unpack
例。
答案 0 :(得分:6)
enumerate
本身使用列表值及其相应的索引创建元组。在这种情况下:
list(enumerate(tuples))
给出:
[(0, ('Jhon', 1)), (1, ('Jane', 2))]
要完全打开包装,可以试试这个:
for index, (name, id) in enumerate(tuples):
pass
这里,Python正在削减右侧的索引和元组对象,结果在左侧,然后分配。
答案 1 :(得分:3)
解包时将name
和score
包装在元组中。
for id, (name, score) in enumerate(tuples):
print(id, name, score)
# Output
# (0, 'Jhon', 1)
# (1, 'Jane', 2)
枚举(thing),其中thing是迭代器或序列,返回将返回的迭代器(0,thing [0]),(1,thing [1]),(2,thing [2])等等。
在这种情况下,事物是一个元组。