首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将迭代器链接到平坦迭代器

将迭代器链接到平坦迭代器
EN

Stack Overflow用户
提问于 2017-08-02 07:26:05
回答 2查看 2.3K关注 0票数 6

试图用迭代工具的链来解决我的问题。我有一个迭代器列表,我想得到一个迭代器,它以无缝的方式遍历列表中迭代器的项。是否有办法这样做?也许另一种工具,而不是链条,会更合适?

我的代码的简化示例:

代码语言:javascript
复制
iter1 = iter([1,2])
iter2 = iter([3,4])
iter_list = [iter1, iter2]
chained_iter = chain(iter_list)

预期结果:

代码语言:javascript
复制
chained_iter.next() --> 1
chained_iter.next() --> 2
chained_iter.next() --> 3
chained_iter.next() --> 4

实际结果:

代码语言:javascript
复制
chained_iter.next() --> <listiterator at 0x10f374650>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-02 07:26:49

您希望使用itertools.chain.from_iterable()来代替:

代码语言:javascript
复制
chained_iter = chain.from_iterable(iter_list)

您将一个可迭代的元素传递给chain();它的设计目的是从多个可迭代性中获取元素,并将这些元素链接起来。单次迭代包含更多迭代器并不重要。

还可以使用*语法应用该列表:

代码语言:javascript
复制
chained_iter = chain(*iter_list)

对于列表来说,这很好,但是如果iter_list本身就是一个没完没了的迭代器,那么您可能不希望Python试图将其扩展为单独的参数。

演示:

代码语言:javascript
复制
>>> from itertools import chain
>>> iter1 = iter([1, 2])
>>> iter2 = iter([3, 4])
>>> iter_list = [iter1, iter2]
>>> chained_iter = chain.from_iterable(iter_list)
>>> next(chained_iter)
1
>>> next(chained_iter)
2
>>> next(chained_iter)
3
>>> next(chained_iter)
4
票数 9
EN

Stack Overflow用户

发布于 2017-08-02 07:33:15

你可以试试这个方法:

代码语言:javascript
复制
>>> from itertools import chain
>>> iter1 = iter([1,2])
>>> iter2 = iter([3,4])
>>> iter_list = [iter1, iter2]
>>> chained_iter = chain(*iter_list)
>>> next(chained_iter)
1
>>> next(chained_iter)
2
>>> next(chained_iter)
3
>>> next(chained_iter)
4
>>>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45454169

复制
相关文章

相似问题

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