私が書いているPythonプログラムでは、各ノードを後続ノードにマップするディクショナリを使用してリンクリストを作成しました(最後のノードはNoneにマップされています)。
(実際、辞書には、ウィキペディアがスパゲッティスタックと呼ばれるものが含まれています。これは、各ノードがその親にリンクされているが、その子にはリンクされていないツリーです。これは、リーフノードからルートノードへの部分的に重複するパスが多数あることを意味します。 。私は、特定のリーフノードから始まるこれらのパスの1つだけを気にします。これは、辞書内のすべての要素を反復処理することを含むソリューションを除外することを除いて、質問にとって実際には重要ではありません。)
このリストを反復可能として別の関数に渡す必要があります。ジェネレーター関数(以下のコードを参照)を使用してこれを実行できることは知っていますが、必要なイテレーターを1行(またはジェネレーター式)で作成するための組み込み関数が必要なようです。ドキュメントを少し検索しましたが、itertoolsまたはfunctoolsモジュールには何も当てはまらないようで、他にどこを見ればよいかわかりません。
これが私が今持っているジェネレーター関数です。外側の関数は削除(インライン化)できますが、内側のジェネレーターは、データを反復可能にする唯一の簡単な方法のようです。
def makeListGenerator(nextDict, start):
def gen(node):
while node:
yield node
node = nextDict[node]
return gen(start)
この種のジェネレーターにはパターンがあるはずですが、それが何と呼ばれるかはわかりません。一般的なバージョンは次のとおりです。
def makeGenericGenerator(nextFunc, continueFunc, start):
def gen(value):
while continueFunc(value):
yield value
value = nextFunc(value)
return gen(start)
次の呼び出しを使用して、これを使用して特定のバージョンを実装できます。
makeGenericGenerator(lambda v: nextDict[v], bool, start)
そのようなものはPython標準ライブラリにすでに存在しますか?