【发布时间】:2014-07-15 11:16:11
【问题描述】:
在itertools 中有chain,它将多个生成器组合在一个生成器中,本质上对它们进行深度优先迭代,即chain.from_iterable(['ABC', '123']) 产生A、B、C、1、2、3 . 但是,没有广度优先的版本,还是我遗漏了什么?当然有izip_longest,但是对于大量的生成器来说这感觉很尴尬,因为元组会很长而且可能很稀疏。
我想出了以下内容:
def chain_bfs(*generators):
generators = list(generators)
while generators:
g = generators.pop(0)
try:
yield g.next()
except StopIteration:
pass
else:
generators.append(g)
对我来说感觉有点冗长,我是否缺少更 Pythonic 的方法?这个函数是否适合包含在itertools 中?
【问题讨论】:
-
所以你基本上想在这里链接
zip()的输出?我不会将其称为呼吸优先与深度优先(这意味着更深的树)。 -
对于给定的示例,我希望生成的生成器输出 A、1、B、2、C、3。并且,如果提供了“AB”和“1234”,则为 A、1、B、2、3、4。