我想知道python中这两种不同的2D矩阵初始化方法有什么区别。
m =[]
K = []
for x in range(0,W+1):
m.append(0)
for x in range(0,n+1):
K.append(m)
和
l = []
for j in range(0,n+1):
l.append([])
for i in range(0,W+1):
l[j].append(0))
当我尝试打印l和K时,两者都给出了相同的答案但是当我尝试在代码中实现它时,程序的输出发生了变化。
较早的一个(K)给出了错误的答案,但后来的一个(l)在程序中实现时给出了正确的答案。
答案 0 :(得分:1)
在第一个中,您将相同的引用存储在m
中的列表k
中。 m
中的更改将反映在所有参考中。
如第二项所示,您在l
中创建新列表。因此,一个人的变化是独立的。
或者,初始化列表的简单方法如下:
持有与list
相同的引用(与您的第一种方法类似)如下:
>>> row, columns = 2, 3
>>> my_list = [[0]*columns]*row
>>> my_list
[[0, 0, 0], [0, 0, 0]]
>>> my_list[0][1] = 1 # changing value
>>> my_list
[[0, 1, 0], [0, 1, 0]]
# ^ ^ Reflected in all
持有对列表的不同引用(类似于您的第二种方法)如下:
>>> my_list = [[0]*columns for i in range(row)]
>>> my_list
[[0, 0, 0], [0, 0, 0]]
>>> my_list[0][1] = 1 # changing value
>>> my_list
[[0, 1, 0], [0, 0, 0]]
# ^ only one value is changed