I have a code where I zero a column or row if it contains zero , I have my own function but when I use it it returns None , I made a copy of my matrix and performed changes on it and then I converted the values to the original one and yet I still get no return . my function shouldn’t return values only update the matrix values. here’s the code:
def ConvertMatrix(NumOfRows,M): for i in range(numOfRows): Col=len(M[i]) M1=[[M[i][j] for j in range(Col)] for i in range(numOfRows)] for i in range(numOfRows): for j in range(Col): if M[i][j]==0: for n in range(Col): M1[i][n]=0 for k in range(numOfRows): M1[k][j]=0 M=[[M1[i][j] for j in range(Col)] for i in range(numOfRows)] numOfRows = int(input()) M = [[int(item) for item in input().split(' ')] for i in range(numOfRows)] M=ConvertMatrix(numOfRows,M) print(M)
Advertisement
Answer
ConvertMatrix(numOfRows, M)
does not return anything which means it implicitly returns None
. Hence
M = ConvertMatrix(numOfRows, M)
turns M
into None
. There are two changes you should apply in order to make this mutation function approach work:
Change the last line in the function to:
M[:] = [[M1[i][j] for ...] # slice assignment mutates the passed list object ... # otherwise you are just rebinding a local variable
Do not assign the function result:
# ... ConvertMatrix(numOfRows, M) print(M)