如何使用枚举解压元组列表?
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
异常。
解包时将 name
和 score
包裹在一个元组中。
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是将右边的索引和元组对象与左边的结果配对,然后赋值。
我偶然发现了一个我无法解释的解压问题。
这个有效:
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
异常。
解包时将 name
和 score
包裹在一个元组中。
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是将右边的索引和元组对象与左边的结果配对,然后赋值。