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) ```

Original source

Related problems