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