palabras iteradores generadores generador funcion explicacion creacion codigo python iterator

iteradores - python funcion yield



Python idiom para encadenar(iterar) un iterable infinito de iterables finitos? (2)

Esta pregunta ya tiene una respuesta aquí:

Supongamos que tenemos un iterador (uno infinito) que devuelve listas (o iteradores finitos), por ejemplo, uno devuelto por

infinite = itertools.cycle([[1,2,3]])

¿Qué es un buen modismo de Python para obtener un iterador (obviamente infinito) que devolverá cada uno de los elementos del primer iterador, luego cada uno del segundo, etc. En el ejemplo anterior, devolvería 1,2,3,1,2,3,... El iterador es infinito, por lo que itertools.chain(*infinite) no funcionará.

Relacionado


Usa un generador:

(item for it in infinite for item in it)

La * construcción se descomprime en una tupla para pasar los argumentos, por lo que no hay forma de usarla.


Comenzando con Python 2.6, puede usar itertools.chain.from_iterable :

itertools.chain.from_iterable(iterables)

También puede hacer esto con una comprensión de generación anidada:

def flatten(iterables): return (elem for iterable in iterables for elem in iterable)