Generadores y enumerate

Secuencia de valores que se va calculando sobre la marcha. Se basan en la orden yield

Generadores


In [2]:
def generador( n:int ):
    for i in range(n):
        yield i

Procedamos ahora a llamarlo con la orden next()


In [3]:
g = generador(3)
next(g) , next(g) , next(g) # si pusieramos otro generaríamos un error


Out[3]:
(0, 1, 2)

Enumerate

Devuelve tupla con índice y valor (en dicho orden)


In [4]:
for i , valor in enumerate([ 3 for i in range(2) ] ):
    print('El índice es ' , i , ' para variar su valor es: ' ,valor)


El índice es  0  para variar su valor es:  3
El índice es  1  para variar su valor es:  3

Todo este rollo que os acabo de meter es porque quería implementar:


In [9]:
def enumergen( lista:list ):
    for i, val in enumerate(lista):
        yield i , val
    while True:
        yield False , False

In [20]:
gen = enumergen([4,2,9])
a = next(gen)
while a != (False , False):
    print(a)
    a = next(gen)


(0, 4)
(1, 2)
(2, 9)

In [ ]: