我有一系列生成器:(gen_0,gen_1,... gen_n)。
这些生成器将懒惰地创建它们的值,但是它们都是有限的,并且可能长度不同。
我需要能够构造另一个生成器,按顺序产生每个生成器的第一个元素,然后是第二个元素等,跳过已经耗尽的生成器的值。
我认为这个问题类似于取元组。
很不幸,这些项的长度不一定相同,而且使用zip技巧在生成器上似乎无法工作。 到目前为止,我的代码非常丑陋,我无法找到任何接近简洁解决方案的东西。有帮助吗?
这些生成器将懒惰地创建它们的值,但是它们都是有限的,并且可能长度不同。
我需要能够构造另一个生成器,按顺序产生每个生成器的第一个元素,然后是第二个元素等,跳过已经耗尽的生成器的值。
我认为这个问题类似于取元组。
((1, 4, 7, 10, 13, 16), (2, 5, 8, 11, 14), (3, 6, 9, 12, 15, 17, 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)。需要遍历它们,使得它们能够按顺序产生1到18的数字。
如果元组的元素长度相同,解决由元组元组构成的简单问题非常简单。如果变量'a'指向了这个元组,你可以使用以下代码:
[i for t in zip(*a) for i in t]
很不幸,这些项的长度不一定相同,而且使用zip技巧在生成器上似乎无法工作。 到目前为止,我的代码非常丑陋,我无法找到任何接近简洁解决方案的东西。有帮助吗?
itertools.izip_longest
;你可以传递一个标记来填充用尽的生成器。如果需要,你可以过滤掉结果中的标记。 - Katriel