【发布时间】:2015-02-11 04:17:27
【问题描述】:
我想链接多个可迭代对象,所有内容都使用惰性求值(速度至关重要),以执行以下操作:
- 从一大行标准输入中读取多个整数
- split() 那一行
- 将生成的字符串转换为 int
- 计算连续整数之间的差异
- ...以及此处未显示的其他内容
真实的例子比较复杂,这里有一个简化的例子:
这是标准输入的示例行: 2 13 4 16 16 15 22 17 8 8 7 6
(出于调试目的,下面的instream 可能指向 sys.stdin,或打开的文件句柄)
您不能简单地链接生成器,因为map() 返回一个(惰性求值的)列表:
import itertools
gen1 = map(int, (map(str.split, instream))) # CAN'T CHAIN DIRECTLY
我找到的最简单的工作解决方案是这个,它肯定不能简化吗?
gen1 = map(int, itertools.chain.from_iterable(itertools.chain(map(str.split, instream))))
为什么我需要链接 itertools.chain.from_iterable(itertools.chain 只是为了处理来自 map(str.split, instream) 的结果 - 这有点违背目的?
手动定义生成器是否更快?
【问题讨论】:
标签: python-3.x generator itertools chaining iterable