官方Python3文档说:
zip()与*运算符一起用于解压缩列表:
但也说,zip()是“创建一个迭代器,聚合每个迭代的元素”
x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
list(zipped)
x2, y2 = zip(*zip(x, y))
我对最后一行zip(*zip(x, y))
感到困惑,zip(x, y)
返回一个可迭代对象,而不是列表。 *zip(x, y)
如何运作!?如何*upzip
一个迭代器!?
答案 0 :(得分:1)
这是在最后一个语句中发生的事情。内部zip
:
zip(x, y)
...导致可迭代超过([1,4], [2,5], [3,6])
。然后这个:
zip(*zip(x, y))
转换为:
zip([1,4], [2,5], [3,6])
...因为星号消耗了iterable并传播了值,因此它们成为外部zip
函数的单独参数。
该表达式被评估为可迭代的两个值:
([1, 2, 3], [4, 5, 6])
...需要分配(解包)两个变量(分别为x2
和y2
),因此这两个值都是从迭代中消耗的。