<p>在我用<code>.children</code>替换<code>...[0]</code>并用<code>.node_val</code>替换<code>...[1]</code>之后,您的代码才开始对我有意义,如果您使用的是具有属性<code>children</code>和<code>node_val</code>的适当<code>Node</code>对象,而不是列表:</p>
<pre><code>sol = 0
for f_2 in F_2:
if f_2 in A.children:
fac1 = f(f_2,indeces[0])
for f_1 in F_1:
if f_1 in A.children[f_2].children:
fac2 = f(f_1,indeces[1])
for f_0 in F_0:
if f_0 in A.children[f_2].children[f_1].children:
sol +=(float(A.children[f_2].children[f_1].children[f_0])
/A.children[f_2].children[f_1].node_val)
*fac1*fac2*f_(indeces[-1],f_0)
</code></pre>
<p>您可能需要的是一个递归解决方案,类似于此(显然未经测试):</p>
<pre><code>def recursive(F, indeces, node):
assert len(F) == len(indeces)
children = node[0]
node_val = node[1]
total = 0
if len F > 1: # do recursive call
for child_key in F[0]:
if child_key in children:
fac = f(child_key, indeces[0])
total += fac * recursive(F[1:], indeces[1:], children[child_key])
else: # only 1 item left
for child_key in F[0]:
if child_key in children:
fac = f_(indeces[0], child_key)
total += fac * (float(children[child_key]xx) / node_val)
return total
F_X = [F_2, F_1, F_0]
ind = [i0, i1, i2]
result = recursive(F_X, ind, A)
</code></pre>
<p><code>xx</code>指的是我对你的问题的评论,你的<code>float()</code>的参数似乎是一个节点,而我应该是一个数字(<code>node_val</code>?)。你知道吗</p>