¿Hay alguna manera en Python para cambiar el orden en que se procesa el rendimiento de get? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Versión de Breadth-first de itertools.chain () 2 respuestas

Si lo hago

def foo():
    yield from range(0,10)
    yield from range(10,20)

for num in foo():
    print(num)

Obtengo una lista ordenada de 0 a 19. Sin cambiar la entrada de las funciones de rango, ¿hay una manera fácil de especificar que quiero una lista que vaya: 0,10,1,11,2,12 ...

Básicamente, primero quiero el primer elemento de cada generador. De lo que quiero el segundo elemento de cada generador y luego el tercero y así sucesivamente.

Puntos de bonificación: ¿Hay alguna forma de cambiarlo para que cuando los generadores produzcan una cantidad desigual de resultados, el segundo generador arroje el resto de sus resultados después de que termine el primero?

Respuestas a la pregunta(1)

Su respuesta a la pregunta