首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用zip、*和*3的组合同时迭代3个元素?

如何使用zip、*和*3的组合同时迭代3个元素?
EN

Stack Overflow用户
提问于 2022-02-26 03:31:47
回答 1查看 585关注 0票数 5

我试图使用以下方法一次迭代3个以上的元素(这似乎有效):

代码语言:javascript
复制
for a, b, c in zip(*[iter(accounts_iter)]*3):
    print(a)
    print(b)
    print(c)

  1. accounts_iter是一个元组列表,i created.
  2. iter(accounts_iter)accounts_iter解压到列表迭代器中,所以它仍然是一个元组列表,就像它现在可迭代的

一样。

这是我难以理解的地方。

  • *[iter(accounts_iter)]Step 2中的列表解压缩为单独的元组,因此不再是元组列表,而是单个tuples
  • *[iter(accounts_iter)]*3乘以3

在我的输出中,我似乎没有重复的,但确实能够处理每个循环3项。

但是,一旦zip(*[iter(accounts_iter)]*3)发生,我就不会有3份相同的元组吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-26 03:44:21

展开层层的“聪明”,您可能会发现这种等效的拼写更容易理解:

代码语言:javascript
复制
x = iter(accounts_iter)
for a, b, c in zip(*[x, x, x]):
    print(a, b, c)

这又相当于一个更不聪明的人:

代码语言:javascript
复制
x = iter(accounts_iter)
for a, b, c in zip(x, x, x):
    print(a, b, c)

现在它应该开始变得清晰了。只有一个迭代器对象,x。在每次迭代中,zip()在幕后对传递给它的每个迭代器对象调用3次next(x)。但每次都是相同的迭代器对象。因此,它传递前3个next(x)结果,并让共享迭代器对象等待下一个交付其第四个结果。泡沫,冲洗,重复。

顺便说一句,我怀疑你在头脑中不正确地解析*[iter(accounts_iter)]*3。尾随*3首先发生,然后前缀*应用于创建的3元素列表*3f(*iterable)是一个使用可变参数调用f()的快捷方式,每个iterable传递的对象都有一个参数。

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

https://stackoverflow.com/questions/71273873

复制
相关文章

相似问题

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