Есть ли в python встроенная функция для чередования генераторов / последовательностей?

Я заметил, что itertools не имеет (мне кажется) функции, способной чередовать элементы из нескольких других повторяемых объектов (в отличие от их архивирования):

def leaf(*args): return (it.next() for it in cycle(imap(chain,args)))
tuple(leaf(['Johann', 'Sebastian', 'Bach'], repeat(' '))) => ('Johann', ' ', 'Sebastian', ' ', 'Bach', ' ')

(Edit) Я спрашиваю, потому что я хочу избежать ненужного zip / flatten.

Очевидно, что определение leaf достаточно просто, но если есть предопределенная функция, которая делает то же самое, я бы предпочел использовать это или очень четкое выражение генератора . Есть ли такая встроенная функция в itertools или в какой-нибудь другой известной библиотеке, или подходящее идиоматическое выражение?

Редактировать 2: Еще более краткое Возможно определение (с использованием пакета функционал ):

from itertools import *
from functional import *

compose_mult = partial(reduce, compose)
leaf = compose_mult((partial(imap, next), cycle, partial(imap, chain), lambda *args: args))
13
задан Marcin 8 January 2012 в 11:04
поделиться