我注意到itertools
似乎没有一种能够交替从几个其他可迭代对象中获取元素的函数(与将它们压缩在一起不同):
def leaf(*args): return (it.next() for it in cycle(imap(chain,args)))
tuple(leaf(['Johann', 'Sebastian', 'Bach'], repeat(' '))) => ('Johann', ' ', 'Sebastian', ' ', 'Bach', ' ')
(编辑) 我提出这个问题的原因是我想避免不必要的压缩/展平发生。
显然,“叶子”的定义很简单,但如果有一个预定义的函数可以做同样的事情,我宁愿使用它,或者一个非常清晰的生成器表达式。 是否有这样一个内置函数,在itertools中,或在其他知名库中,或适当的习惯用语?
编辑2:甚至可以使用“functional”包进行更简洁的定义:
from itertools import *
from functional import *
compose_mult = partial(reduce, compose)
leaf = compose_mult((partial(imap, next), cycle, partial(imap, chain), lambda *args: args))