Quiero generar todas las rutas desde cada hoja hasta la raíz en un árbol. Me gustaría hacer eso con generadores, para ahorrar memoria (el árbol puede ser grande). Aquí está mi código:Python (rendimiento): todas las rutas desde las hojas hasta la raíz en un árbol
def paths(self, acc=[]):
if self.is_leaf():
yield [self.node]+acc
for child in self.children:
child.paths([self.node]+acc)
Pero no funciona. ¿Por qué? Invocado en la raíz, atraviesa el árbol de arriba a abajo, recogiendo nodos en "acc". "acc" debe devolverse en cada hoja ...
is_leaf() es verdadero si self.children está vacío.
Siempre me he preguntado: ¿hay un comando rápido "ceder todo", o es el más corto el bucle 'for' que ha escrito? – Owen
@Own no, pero me parece bien así, son solo dos líneas simples ... –
En Python 3.3 habrá una declaración 'yield from' que automáticamente producirá elementos de otro generador, por lo que cualquier' for' loop con un "rendimiento" en él puede escribir como una expresión del generador se puede hacer en una línea. – agf