如何使用python在矩阵中找到最大平方和

我正在尝试编写一个代码,该代码将为我提供矩阵中最大平方和。


注意:在形成正方形时,这些值必须彼此相邻。


注意 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。


我尝试了很多方法来修复错误,但都没有奏效。


HUH函数
浏览 205回答 2
2回答

明月笑刀无情

我认为你的第一个例子只是偶然地起作用,因为你的矩阵的形状。目前,该循环中使用的切片意味着您正在从第二个子列表中选择到最后: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)

郎朗坤

问题是你的内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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python