Transpor preguiçosamente uma lista em Python

Então, eu tenho um iterável de 3 tuplas, gerado preguiçosamente. Estou tentando descobrir como transformar isso em 3 iterables, consistindo no primeiro, segundo e terceiro elementos das tuplas, respectivamente. No entanto, desejo que isso seja feito preguiçosamente.

Então, por exemplo, eu desejo[(1, 2, 3), (4, 5, 6), (7, 8, 9)] ser transformado em[1, 4, 7], [2, 5, 8], [3, 6, 9]. (Exceto que eu quero iterables, não listas.)

O padrãozip(*data) O idioma não funciona, porque o argumento de descompactar expande todo o iterável. (Você pode verificar isso observando quezip(*((x, x+1, x+2) for x in itertools.count(step=3))) trava.)

O melhor que eu vim até agora é o seguinte:

def transpose(iterable_of_three_tuples):
    teed = itertools.tee(iterable_of_three_tuples, 3)
    return map(lambda e: e[0], teed[0]), map(lambda e: e[1], teed[1]), map(lambda e: e[2], teed[2])

Isso parece funcionar. Mas dificilmente parece um código limpo. E faz muito do que parece ser um trabalho desnecessário.

questionAnswers(1)

yourAnswerToTheQuestion