zip(*[ITER(S)]*n)在Python中是如何工作的?

zip(*[ITER(S)]*n)在Python中是如何工作的?

s = [1,2,3,4,5,6,7,8,9]

n = 3


zip(*[iter(s)]*n) # returns [(1,2,3),(4,5,6),(7,8,9)]

如何zip(*[iter(s)]*n)工作?如果它是用更冗长的代码编写的,它会是什么样的呢?


鸿蒙传说
浏览 767回答 3
3回答

慕运维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,依此类推。一个非常微妙的事情,但相当聪明!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python