擅长:python、mysql、java
<p>不要每次都重新创建<code>nwalls</code>列表,只需为列表中的特定槽指定一个新值,而是在列表中保留以前的值的记录,这样就不会使用循环中先前生成的值:</p>
<pre><code>mat = [[3], [4], [4], [0], [1, 2]]
nwalls = 5*[1]
prev_nwalls = 5*[1]
for _ in range(1,3):
for j in range(5):
nwalls[j] = sum(prev_nwalls[k] for k in mat[j])
prev_nwalls[:] = nwalls
assert nwalls == [1, 2, 2, 1, 2]
</code></pre>
<p>如果您想完全避免理解,首先要知道与<code>sum</code>内建函数等价的python如下所示:</p>
^{pr2}$
<p>因此<code>nwalls[j] = sum(prev_nwalls[k] for k in mat[j])</code>行将替换为如下内容:</p>
<pre><code>s = 0
for k in mat[j]:
s+=nwalls[k]
nwalls[j] = s
</code></pre>