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例子.
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正在削减右侧的索引和元组对象,结果在左侧,然后分配.
打开包装时,将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]),等等向前。
在这种情况下,事物是一个元组。