慕运维8079593
iter()是序列上的迭代器。[x] * n生成包含以下内容的列表n数量x,即长度列表n,其中每个元素都是x. *arg将序列解压缩为函数调用的参数。因此,您要将相同的迭代器传递3次到zip(),它每次都从迭代器中提取一个项。x = iter([1,2,3,4,5,6,7,8,9])print zip(x, x, x)
临摹微笑
我认为在所有答案中都遗漏了一件事(对熟悉迭代器的人来说可能是显而易见的),但对其他人来说却不是那么明显-因为我们有相同的迭代器,所以它会被消耗,剩下的元素由zip使用。所以,如果我们只是使用列表,而不是ITER的例子。l = range(9)zip(*([l]*3)) # note: not an iter here, the lists are not emptied as we iterate # output [(0, 0, 0), (1, 1, 1),
(2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8)]使用迭代器,会弹出值,并且只保留可用的值,因此,对于消耗0的zip,1是可用的,然后是2,依此类推。一个非常微妙的事情,但相当聪明!