如何使用枚举解压元组列表?

How to unpack a list of tuples with enumerate?

我偶然发现了一个我无法解释的解压问题。

这个有效:

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 异常。

解包时将 namescore 包裹在一个元组中。

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

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

enumerate(thing), where thing is either an iterator or a sequence, returns a iterator that will return (0, thing[0]), (1, thing[1]), (2, thing[2]), and so forth.

在这种情况下,thing 是一个元组。

enumerate 本身使用列表值及其相应索引创建元组。在这种情况下:

list(enumerate(tuples))

给出:

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

要完全解压缩,您可以试试这个:

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

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