首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >zip(*[iter(s)]*n)在Python中是如何工作的?

zip(*[iter(s)]*n)在Python中是如何工作的?
EN

Stack Overflow用户
提问于 2010-02-10 07:07:21
回答 6查看 32.3K关注 0票数 116
代码语言:javascript
复制
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)是如何工作的?如果它是用更冗长的代码编写的,它看起来会是什么样子?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-10 07:15:11

iter()是序列上的迭代器。[x] * n生成一个包含n数量x的列表,即一个长度为n的列表,其中每个元素都是x*arg将序列解压到函数调用的参数中。因此,您将向zip()传递相同的迭代器3次,并且每次都从迭代器中提取一个项目。

代码语言:javascript
复制
x = iter([1,2,3,4,5,6,7,8,9])
print zip(x, x, x)
票数 121
EN

Stack Overflow用户

发布于 2015-05-22 01:29:40

我认为在所有答案中遗漏了一件事(对于那些熟悉迭代器的人来说可能是显而易见的),但对其他人来说不是那么明显的是-

因为我们有相同的迭代器,所以它被使用,其余的元素由zip使用。因此,如果我们只是使用列表而不是iter,例如。

代码语言:javascript
复制
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)]

使用迭代器,弹出值并保持可用,因此对于zip,一旦使用0,则1可用,然后是2,依此类推。一件非常微妙的事情,但相当聪明!

票数 33
EN

Stack Overflow用户

发布于 2010-02-10 07:23:28

iter(s)返回s的迭代器。

[iter(s)]*n生成一个n倍于s的相同迭代器的列表。

因此,在执行zip(*[iter(s)]*n)时,它会按顺序从列表中的所有三个迭代器中提取一项。因为所有迭代器都是同一个对象,所以它只是将列表分组为n块。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2233204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档