为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

鸿蒙传说 2019-07-05 13:15:36
zip(*[ITER(S)]*n)在Python中是如何工作的?s = [1,2,3,4,5,6,7,8,9]n = 3zip(*[iter(s)]*n) # returns [(1,2,3),(4,5,6),(7,8,9)]如何zip(*[iter(s)]*n)工作?如果它是用更冗长的代码编写的,它会是什么样的呢?
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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)


查看完整回答
反对 回复 2019-07-05
?
临摹微笑

TA贡献1982条经验 获得超2个赞

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

因为我们有相同的迭代器,所以它会被消耗,剩下的元素由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,依此类推。一个非常微妙的事情,但相当聪明!


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 766 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信