首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python中的zip耗尽迭代器

用Python中的zip耗尽迭代器
EN

Stack Overflow用户
提问于 2021-09-13 18:49:53
回答 1查看 37关注 0票数 1

出于好奇,我想问,为什么下面的Python行为是想要的呢?

假设我们有:

代码语言:javascript
运行
复制
a = [1,2,3]
b = [1,2,3]
c = [1,2,3,4]
ai = iter(a)
bi = iter(b)
ci = iter(c)

现在,我期望下面的示例打印[4],但是它会打印[]

代码语言:javascript
运行
复制
for _ in zip(ci, zip(ai, bi)):
    pass

print(list(ci))

控制台:

代码语言:javascript
运行
复制
>>> print(list(ci))
[]

但是,当我更改outter zip的参数时,它会打印我期望的内容([4])。

代码语言:javascript
运行
复制
for _ in zip(zip(ai, bi), ci):
    pass

print(list(ci))

控制台:

代码语言:javascript
运行
复制
>>> print(list(ci))
[4]

这两个示例不应该打印相同的结果吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 18:58:14

next()zip迭代器将尝试按顺序读取每个参数迭代器的下一个元素。如果其中任何一个报告它已经耗尽,zip迭代器将停止并报告它已经耗尽。

这意味着它将对所有比最短参数更长的初始参数执行额外的迭代。这意味着它读取了c的一个额外元素。

您可以在文档中的等效代码中看到这种排序和额外的迭代。

c更改为[1, 2, 3, 4, 5],最后将得到[5]

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

https://stackoverflow.com/questions/69167725

复制
相关文章

相似问题

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