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

Fin*_*inn 3 python tuples python-3.x iterable-unpacking

我偶然发现了一个我无法解释的解包问题.

这有效:

tuples = [('Jhon', 1), ('Jane', 2)]

for name, score in tuples:
    ...
Run Code Online (Sandbox Code Playgroud)

这也有效

for id, entry in enumerate(tuples):
    name, score = entry
    ...
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

for id, name, score in enumerate(tuples):
    ...
Run Code Online (Sandbox Code Playgroud)

抛出一个ValueError: need more than 2 values to unpack例子.

Aja*_*234 6

enumerate它本身创建了具有列表值及其相应索引的元组.在这种情况下:

list(enumerate(tuples))
Run Code Online (Sandbox Code Playgroud)

得到:

[(0, ('Jhon', 1)), (1, ('Jane', 2))]
Run Code Online (Sandbox Code Playgroud)

要完全解压缩,您可以尝试这样做:

for index, (name, id) in enumerate(tuples):
     pass
Run Code Online (Sandbox Code Playgroud)

在这里,Python正在削减右侧的索引和元组对象,结果在左侧,然后分配.


Ale*_*der 5

打开包装时,将name和包裹score在一个元组中。

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

# Output
# (0, 'Jhon', 1)
# (1, 'Jane', 2)
Run Code Online (Sandbox Code Playgroud)

enumerate(thing),其中 thing 是迭代器或序列,返回一个迭代器,它将返回 (0, thing[0]), (1, thing[1]), (2, thing[2]),等等向前。

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