に達するまで繰り返し処理がキーに指定された値を持つ辞書の上に、私は以下のような構造{key:[(next_key, value),...],....}
と辞書を持っている:それはカスタムエンドポイント
d = {0: [(1, 10), (5, 9)], 1: [(0, 14), (3, 3), (4, 17)]}
エンドポイントは以下のとおりです。
ここend_points = [2,3,4,5]
私がする必要がありますd
の値をnext_key
で繰り返し、key
にあり、次のキーの隣にあり、次のキー値が終点にくるまで続きます。ですから、私がエンドポイントに到達すると、辞書にはend_pointsがキー要素として含まれ、それを繰り返したすべての値が乗算されます。つまりend_point 3
の値は10*3 = 30
となり、end_point 4
の値は10 * 17 になりますが、0の要素がキー値1を指し、その要素点が0であるため問題が発生します。そのループを制動して値を考慮する必要がありますend_pointsに到達するための乗算。
基本的には、ループオーバーパスを含む場合と含まない場合があり、最終状態として扱うことができるend_pointsに到達するために値の乗算が必要です。
これまでのところ、私が試してみました:
d = {0: [(1, 10), (5, 9)], 1: [(0, 14), (3, 3), (4, 17)]} # dictionary
end_points = [2,3,4,5] # end points
end_points_cost = {}
loop = lambda x : 1/(1-x)
for key in d:
temp = 1 # multiplication constant
flag=True
for next_key, value in d[key]:
if next_key in end_points_cost:
temp = end_points[next_key]
if next_key not in end_points:
temp = temp * value
elif next_key in end_points:
temp = temp * value
end_points_cost[next_key] = temp
elif key in [i[0] for i in d[next_key]]:
temp = temp * loop(d[key][1] * value)
end_points_cost[next_key] = temp
私の出力:
{3: 42, 4: 714, 5: 90}
所望の出力:
{3: Fraction(-3,139), 4: Fraction(-17,139), 5: Fraction(-9,139)}
更新:
方法の助けを借りて、d = {0: {1: Fraction(7, 12), 3: Fraction(5, 12)}, 1: {0: Fraction(2, 5), 2: Fraction(3, 5)}, 2: {1: Fraction(1, 1)}}
end_points = [3]
私は私のキーに向けてパス[0, 3]
を計算することができていますが、問題は、私は値1にキー0のループ値を計算することができていますし、その逆が、キー1は、キーと別のループを持っています2と私はサブループを含める方法の問題に直面している。
loop_list = [v for v,k in d.items() if source in k and v in d[source]] # considering 0 as source
にこれを考慮する必要がある2キーのキー1である1のサブ結果を計算されない:
私が試みました。
モジュールが内蔵されていることを予期している解決策 – Gahan
あなたが望むものを理解するのは本当に難しいです。より完全な例を挙げてください。 – obgnaw
私はあなたの例を理解していません:最初の例では、なぜ負の値を期待していますか?この場合、どの値が '2 'に期待されますか? 2番目の例で期待する価値は?最終的にあなたのオートマトンが '3 'に到着するので(' '多くのトランジション/ステップがかかるかもしれません!')、あなたの問題を完全に間違って理解することはできません。 .. – ead