我在研究一些欧拉问题,有一个解决方案,我想让它更具适应性。问题本身在这里并不重要,但对于那些好奇的人来说,问题11
目前,我有一个20乘20整数值的网格,我正在寻找4个相邻值的最大乘积。一切都很好而且很快。我目前的情况如下:
maxi = 0
amount = 4
for i in range (0,len(grid) - amount):
for j in range (0,len(grid) - amount):
try:
max_dic = {
'right':grid[i][j]*grid[i][j+1]*grid[i][j+2]*grid[i][j+3],
'down':grid[i][j]*grid[i+1][j]*grid[i+2][j]*grid[i+3][j],
'down_right':grid[i][j]*grid[i+1][j+1]*grid[i+2][j+2]*grid[i+3][j+3],
'down_left':grid[i][j]*grid[i+1][j-1]*grid[i+2][j-2]*grid[i+3][j-3]
}
except IndexError:
pass
max_key = str(max(max_dic.items(), key=operator.itemgetter(1))[0])
if max_dic[max_key] > maxi:
maxi = max_dic[max_key]
我想做的是将字典中的值替换为一些我可以改变的值(以数量为单位),我考虑使用一个for循环,范围从0到amount-1,如下所示:
'right': for a in range(amount): # Multiply the correct values
然而,我不确定这是否可能,如果可能,如何实现它
有什么建议吗
在当前的实现中,无论何时都不会得到
max_dic
结果 任何碎片都超出了网格边界。经常遇到这样的问题,你 你确实想要一个部分的结果。如果是的话,你可能想 以更细粒度的方式处理IndexError
的能力。例如, 您可以创建一个简单的helper函数,它包含一个网格和两个索引以及 返回值或某个默认值(在乘法的情况下是1
)一旦你有了这个积木,你只需要准备一些清单 然后使用标准库中的一些函数:
你可以这样写
相关问题 更多 >
编程相关推荐