Voglio generare tutti i percorsi da ogni foglia a radice in un albero. Mi piacerebbe farlo con i generatori, per risparmiare memoria (l'albero può essere grande). Ecco il mio codice:Python (resa): tutti i percorsi da foglie a radice in un albero
def paths(self, acc=[]):
if self.is_leaf():
yield [self.node]+acc
for child in self.children:
child.paths([self.node]+acc)
Ma non funziona. Perché? Invocato alla radice, attraversa l'albero da cima a fondo, raccogliendo nodi in "acc". "acc" deve essere restituito in ogni foglia ...
is_leaf() è true se self.children è vuoto.
Mi sono sempre chiesto: c'è un rapido comando "produce tutto" o è il più breve ciclo di "for" che hai scritto? – Owen
@Own nope, ma lo trovo OK in questo modo, sono solo due semplici righe ... –
In Python 3.3 ci sarà un'istruzione 'yield from' che produrrà automaticamente elementi da un altro generatore, quindi qualsiasi ciclo' for' con un 'yield' in esso puoi scrivere come un'espressione di generatore può essere fatta in una riga. – agf