我正在尝试编写一个代码,该代码将为我提供矩阵中最大的平方和。
请注意:在形成正方形形状时,这些值必须彼此相邻。
注释2:我只允许使用函数,而我正在上的课目前不允许导入任何内容。
例如:
max_mat_square([[1,2.5,3],
[4,-4,6],
[0.5,-1,5]])
[7.5]
现在这是我的代码:
def max_mat_square(mat):
sum1 = []
for i in range(len(mat[:-1])):
print i
for j in range(len(mat[1:])):
print 'index' , j
sum1.append([float(mat[i][j]) + float(mat[i+1][j])+float(mat[i][j+1])+float(mat[i+1][j+1])])
return max(sum1)
现在代码在第一个示例中运行良好,但是,每当我运行此矩阵时,都将其抛出:
max_mat_square([[1,2], [3,4], [5,6]])
我收到“列表索引超出范围”错误, 我想要此矩阵的结果是18。
我尝试了很多方法来纠正该错误,但没有一个起作用。
答案 0 :(得分:1)
问题出在内部for
循环中。您应该让j
从0开始到行的倒数第二个索引:
for j in range(len(mat[i][:-1])):
...
因此,您的最终功能将变为:
def max_mat_square(mat):
sum1 = []
for i in range(len(mat[:-1])):
print(i)
for j in range(len(mat[i][:-1])):
print('index' , j)
sum1.append([float(mat[i][j]) + float(mat[i+1][j])+float(mat[i][j+1])+float(mat[i+1][j+1])])
return max(sum1)
答案 1 :(得分:1)
由于矩阵的形状,我认为您的第一个示例只能同时出现。当前,该循环中使用的切片意味着您正在从第二个子列表中选择结尾:
mat[1:]
>> [[3,4], [5,6]]
这意味着您将尝试使用range(2)
遍历每个元素,而这些元素将超出范围。
更改第二个for语句,如下所示:
def max_mat_square(mat):
sum1 = []
for i in range(len(mat[:-1])):
for j in range(len(mat[i])-1):
print (i , j)
sum1.append([float(mat[i][j]) + float(mat[i+1][j])+float(mat[i][j+1])+float(mat[i+1][j+1])])
return max(sum1)