我有一系列生成器: (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 技巧似乎对生成器不起作用。
到目前为止,我的代码非常丑陋,我找不到任何接近干净解决方案的东西。帮助?