ねえ、私は次のような行列入力を受け取り、その逆を返す関数を書いています。ここでは、左上から右下の0の対角線を維持しながら、すべての1が0に変更され、すべての0が1に変更されます。
入力例:
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