如何使用enumerate解压元组列表?

14
我发现了一个无法解释的解包问题。
这个可以正常工作:
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 异常。

2个回答

32
< p > enumerate 函数会创建包含列表值和对应索引的元组。在这个例子中:

list(enumerate(tuples))

提供:

[(0, ('Jhon', 1)), (1, ('Jane', 2))]

要完全理解,您可以尝试以下方法:

for index, (name, id) in enumerate(tuples):
     pass

在这里,Python将右侧的索引和元组对象与左侧的结果配对,然后进行赋值。


8

在解包时,将namescore封装成元组。

for id, (name, score) in enumerate(tuples):
    print(id, name, score)

# Output
# (0, 'Jhon', 1)
# (1, 'Jane', 2)

enumerate(thing)函数中,thing可以是一个迭代器或者序列,返回一个迭代器,该迭代器将依次返回(0, thing[0])、(1, thing[1])、(2, thing[2])等。

在本例中,thing是一个元组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接