Как найти наибольшую сумму квадрата в матрице, используя python - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь написать код, который даст мне наибольшую сумму квадрата в матрице.

примечание: значения должны быть рядом друг с другом при формировании формы квадрата.

примечание 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]])

Я получаю 'индекс списка изошибка range ', результат, который я хочу получить для этой матрицы: 18.

Я пробовал много способов исправить ошибку, но ни один из них не сработал.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Я думаю, что ваш первый пример работает только случайно из-за формы вашей матрицы.В настоящее время срезы, используемые в этом цикле, означают, что вы выбираете из второго подсписка до конца:

mat[1:]
>> [[3,4], [5,6]]

Это означает, что вы будете пытаться перебрать каждый элемент с range(2), который выйдет издиапазон.

Измените секунду для оператора следующим образом:

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)
0 голосов
/ 21 ноября 2018

Проблема в вашей внутренней 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...