python - 遍历生成器序列

标签 python algorithm

我有一个生成器序列:(gen_0, gen_1, ... gen_n)

这些生成器将延迟创建它们的值,但它们是有限的,并且可能具有不同的长度。

我需要能够构建另一个生成器,它按顺序生成每个生成器的第一个元素,然后是第二个,依此类推,跳过已经耗尽的生成器的值。

我认为这个问题类似于取元组

((1, 4, 7, 10, 13, 16), (2, 5, 8, 11, 14), (3, 6, 9, 12, 15, 17, 18))

并遍历它,以便按顺序生成从 1 到 18 的数字。

我正在使用 (genA, genB, genC) 解决这个简单的例子,其中 genA 产生值 (1, 4, 7, 10, 13, 16),genB 产生 (2, 5, 8, 11, 14) 和 genC 产生 (3, 6, 9, 12, 15, 17, 18)。

要用元组的元组解决更简单的问题,答案相当简单,如果 元组的元素长度相同。如果变量“a”引用元组,您可以使用

[i for t in zip(*a) for i in t]

不幸的是,这些项目的长度不一定相同,而且 zip 技巧似乎对生成器不起作用。

到目前为止,我的代码非常丑陋,而且我找不到任何接近干净的解决方案。帮忙?

最佳答案

我想你需要itertools.izip_longest

>>> list([e for e in t if  e is not None] for t in itertools.izip_longest(*some_gen,
                                                               fillvalue=None))
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17], [18]]
>>> 

关于python - 遍历生成器序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14377907/

相关文章:

python - 导入关系中使用的 SQLAlchemy 模型?

python - 如何用 Sympy 绘制点?

python - 在pandas中查找两列中的关系值

python - 如何将 pandas 的 DataFrame 转换为 Spark 中的 DataFrame 或 LabeledPoint?

用于文本分析的算法或库,特别是跨文本的 : dominant words, 短语和文本集合

javascript - 在 Tic-Tac-Toe 游戏 JavaScript 中寻找赢家

python - 为什么字典会在我不告诉它的情况下自动打印?

arrays - 最大乘积升序子序列

C++:这些按位 AND 和以下比较有什么作用?

C# XNA A* 寻路敌人卡在对面的墙上