【发布时间】:2019-02-20 11:47:46
【问题描述】:
我正在处理一些 Project Euler 问题,并且有一个解决方案我想让它更具适应性。问题本身在这里并不重要,但对于那些好奇的人来说,这是问题 11。
目前,我有一个由 20 x 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
但是,我不确定这是否可行,如果可行,如何实现。
关于如何做到这一点的任何建议?
【问题讨论】:
标签: python dictionary int grid-layout