擅长:python、mysql、java
<p>在当前的实现中,无论何时都不会得到<code>max_dic</code>结果
任何碎片都超出了网格边界。经常遇到这样的问题,你
你确实想要一个部分的结果。如果是的话,你可能想
以更细粒度的方式处理<code>IndexError</code>的能力。例如,
您可以创建一个简单的helper函数,它包含一个网格和两个索引以及
返回值或某个默认值(在乘法的情况下是<code>1</code>)</p>
<pre><code>def get_val(grid, i, j, default = 1):
try:
return grid[i][j]
except IndexError:
return default
</code></pre>
<p>一旦你有了这个积木,你只需要准备一些清单
然后使用标准库中的一些函数:</p>
<pre><code>from operator import mul
from functools import reduce
# Inside your two loops over i and j ...
ms = list(range(i, i + amount))
ns = list(range(j, j + amount))
rns = list(range(j, j - amount, -1))
max_dic = {
'right' : reduce(mul, [get_val(grid, i, n) for n in ns]),
'down' : reduce(mul, [get_val(grid, m, j) for m in ns]),
'down_right' : reduce(mul, [get_val(grid, m, n) for m, n in zip(ms, ns)]),
'down_left' : reduce(mul, [get_val(grid, m, n) for m, n in zip(ms, rns)]),
}
</code></pre>