How to input matrix (2D list) in Python?
input, list, matrix, python
Solution
The problem is on the initialization step.
for i in range (0,m):
matrix[i] = columns
This code actually makes every row of your `matrix` refer to the same `columns` object. If any item in any column changes - every other column will change:
>>> for i in range (0,m):
... matrix[i] = columns
...
>>> matrix
[[0, 0, 0], [0, 0, 0]]
>>> matrix[1][1] = 2
>>> matrix
[[0, 2, 0], [0, 2, 0]]
You can initialize your matrix in a nested loop, like this:
matrix = []
for i in range(0,m):
matrix.append([])
for j in range(0,n):
matrix[i].append(0)
or, in a one-liner by using list comprehension:
matrix = [[0 for j in range(n)] for i in range(m)]
or:
matrix = [x[:] for x in [[0]*n]*m]
See also:
- How to initialize a two-dimensional array in Python?
Hope that helps.
Problem
I tried to create this code to input an m by n matrix. I intended to input `[[1,2,3],[4,5,6]]` but the code yields `[[4,5,6],[4,5,6]`. Same things happen when I input other m by n matrix, the code yields an m by n matrix whose rows are identical. Perhaps you can help me to find what is wrong with my code. ``` m = int(input('number of rows, m = ')) n = int(input('number of columns, n = ')) matrix = []; columns = [] # initialize the number of rows for i in range(0,m): matrix += [0] # initialize the number of columns for j in range (0,n): columns += [0] # initialize the matrix for i in range (0,m): matrix[i] = columns for i in range (0,m): for j in range (0,n): print ('entry in row: ',i+1,' column: ',j+1) matrix[i][j] = int(input()) print (matrix) ```