-1

since i=j=0 , The code should modify result[0][0] to num which is 1 right?

output=[[1,0,0] ,[1,0,0],[1,0,0]]

expected=[[1,0,0] ,[0,0,0],[0,0,0]]

def right(i,j,num,result):
    result[i][j]=num
    print(result)
result=[]
l=[]
n=3
for _ in range(n):
    l.append(0)
for _ in range(n):
    result.append(l)
num=1       
i=0
j=0       
right(i,j,num,result)

1 Answers1

0

You are appending the same list n times to result. When you change one, you change all of them, because they're the same list.

A simple example:

>>> lst = [1, 2, 3]
>>> lst2 = []
>>> for _ in range(3):
...   lst2.append(lst)
...
>>> lst2
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> lst2[0][0] = 9
>>> lst2
[[9, 2, 3], [9, 2, 3], [9, 2, 3]]

You need to generate unique lists.

result = []
for _ in range(n):
  lst = []
  for _ in range(n):
    lst.append(0)
  result.append(lst)

Or using list comprehensions:

>>> n = 3
>>> result = [[0 for _ in range(n)] for _ in range(n)]
>>> result
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> result[0][0] = 1
>>> result
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
Chris
  • 26,361
  • 5
  • 21
  • 42