ツリー内の各葉からルートまでのすべてのパスを生成したい。私はジェネレータを使って、メモリを節約したい(ツリーは大きくなる可能性があります)ようにしたいと思います。ここに私のコード:Python(yield):ツリー内の葉からルートまでのすべてのパス
def paths(self, acc=[]):
if self.is_leaf():
yield [self.node]+acc
for child in self.children:
child.paths([self.node]+acc)
しかし、それは動作しません。どうして?ルートで呼び出されると、ツリーは上から下へツリーを横断し、「acc」でノードを収集します。すべてのリーフに "acc"を返します。
is_leaf()はself.childrenが空の場合にtrueです。
私はいつも不思議に思っています - 速い "yield all"コマンドか、あなたが書いた最短のforループですか? – Owen
@Own nopeしかし、これのようにOKですが、それはちょうど2つの単純な行です... –
Python 3.3では、自動的に別のジェネレータからアイテムを生成する 'yield from'ステートメントがあります。その中に 'yield 'をつけて、ジェネレータの式を1行に書くことができます。 – agf