【发布时间】:2014-04-03 17:14:51
【问题描述】:
我有一个可迭代的——即响应 __iter__ 并且可以懒惰地迭代的东西,多次每次使用一个新的新迭代器。
我想将其映射到另一个iterable,它也可以迭代多次,但不会将整个集合放入内存。
map 不起作用 - 它返回一个列表,因此将整个数据集带入内存。
itertools.imap 也不起作用——它需要一个 iterable 但返回一个一次性 iterator。
我正在寻找的是一组类似 itertools 的组合器,它们在可迭代的级别上运行。只有在最后阶段,当我使用最终结果时,我是否想要一个单次迭代器对象,所以我真的不明白为什么 itertools 返回它们而不是返回例如某种 MappedIterable。
指点任何人?或者这在某种程度上是异端的非 Pythonic?
【问题讨论】:
-
生成器表达式有什么问题?还是
itertools.izip()?这在很大程度上取决于您真正想要对这些值做什么。 -
完全不清楚您希望对您的两个迭代器进行什么样的处理。
-
生成器表达式是一次性对象,而不是可迭代的集合。
-
你能把你懒惰的、多次迭代的代码贴出来吗?一个可能的用例以及预期和观察到的行为?
-
但
iter(youriterable)也是一次性迭代器。所有迭代器都是一次性的,这是根据定义。
标签: python stream functional-programming iterator iterable