Estoy tratando de usar un generador con una clase de Python que funciona de manera similar a una lista vinculada.Rendimiento en la estructura de datos recursiva
Aquí es un ejemplo muy simple de lo que quiero decir:
class GeneratorTest():
def __init__(self, list):
if list:
self.elem = list[0]
if list[1:]:
self.n = GeneratorTest(list[1:])
else:
self.n = None
def __iter__(self):
return self
def next(self):
my_next = self
while my_next is not None:
yield my_next
my_next = my_next.n
Por supuesto, esto es sólo un ejemplo, pero es suficiente para ilustrar el punto.
Ahora, yo estaba esperando a ser capaz de invocar algo como:
g = GeneratorTest([1,2,3,4,5])
for x in g:
print x
y tienen la parada del ciclo cuando alcanzó el último valor, pero el bucle simplemente continúa sin cesar.
Soy bastante nuevo en generadores, así que estoy seguro de que es una premisa básica que me falta aquí.
¿El problema está relacionado con el hecho de que cedo el mismo objeto que crea el generador? Estoy seguro de que si tuviera un objeto con una lista de objetos GeneratorTest, podría devolver cada uno de estos objetos de manera bastante simple, pero creo que debería haber una manera de hacerlo funcionar sin un objeto "envoltorio".
¿Qué me falta aquí?
'list' es el nombre de un builtin, por lo que lo está sombreando cuando lo usa como argumento para su método' __init__'. – MattH
sí, sí, lo sé, este es solo un ejemplo que pirateé y no me molesté con los nombres. El código real es similar en lógica pero con nombres que tienen sentido y que no eclipsan a los builtins. ¡Gracias por señalar eso de todos modos! – pcalcao
Es muy útil proporcionar buenos ejemplos: autocontenido y demostrativo. – MattH