Transponer perezosamente una lista en Python

Entonces, tengo un iterable de 3 tuplas, generadas perezosamente. Estoy tratando de descubrir cómo convertir esto en 3 iterables, que consisten en el primer, segundo y tercer elemento de las tuplas, respectivamente. Sin embargo, deseo que esto se haga perezosamente.

Entonces, por ejemplo, deseo[(1, 2, 3), (4, 5, 6), (7, 8, 9)] ser convertido en[1, 4, 7], [2, 5, 8], [3, 6, 9]. (Excepto que quiero iterables, no listas).

El estandarzip(*data) el idioma no funciona, porque el desempaquetado de argumentos expande todo el iterable. (Puede verificar esto observando quezip(*((x, x+1, x+2) for x in itertools.count(step=3))) se cuelga)

Lo mejor que he encontrado hasta ahora es lo siguiente:

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])

Esto parece funcionar. Pero apenas parece un código limpio. Y hace mucho de lo que parece ser un trabajo innecesario.

Respuestas a la pregunta(1)

Su respuesta a la pregunta