Эй, я пишу функцию, которая принимает на вход матрицу, такую как приведенная ниже, и возвращает ее обратную, где все 1 заменяются на 0, а все 0 заменяются на 1, сохраняя при этом диагональ от верхнего левого до нижнего правого 0.
Пример ввода:
g1 = [[0, 1, 1, 0],
[1, 0, 0, 1],
[1, 0, 0, 1],
[0, 1, 1, 0]]
функция должна вывести следующее:
g1 = [[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 0]]
Когда я запускаю программу, она выдает ошибку "индекс списка вне допустимого диапазона". Я уверен, что это связано с тем, что созданные мной циклы пытаются получить доступ к несуществующим значениям, но как мне разрешить ввод неизвестного размера строки и столбца? Я знаю, как это сделать только с одним списком, но список списков? Вот функция, не включая тестовую функцию, которая ее вызывает:
def inverse_graph(graph):
# take in graph
# change all zeros to ones and ones to zeros
r, c = 0, 0 # row, column equal zero
while (graph[r][c] == 0 or graph[r][c] == 1): # while the current row has a value.
while (graph[r][c] == 0 or graph[r][c] == 1): # while the current column has a value
if (graph[r][c] == 0):
graph[r][c] = 1
elif (graph[r][c] == 1):
graph[r][c] = 0
c+=1
c=0
r+=1
c=0
r=0
# sets diagonal to zeros
while (g1[r][c] == 0 or g1[r][c] == 1):
g1[r][c]=0
c+=1
r+=1
return graph