Python 为什么每次迭代后整列的值都会发生变化,而不仅仅是一个特定的单元格?
我正在尝试将python列表转换为没有numpy库的2d矩阵 然而,在这样做时,我的代码并没有像预期的那样工作Python 为什么每次迭代后整列的值都会发生变化,而不仅仅是一个特定的单元格?,python,arrays,python-3.x,list,matrix,Python,Arrays,Python 3.x,List,Matrix,我正在尝试将python列表转换为没有numpy库的2d矩阵 然而,在这样做时,我的代码并没有像预期的那样工作 n=3 arr = [16,13,4,16,13,19,23,8,11] mat=[[0]*n]*n #initialising a 3*3 matrix for a in range(n): for b in range(n): mat[a][b]=arr[b] print(mat)
n=3
arr = [16,13,4,16,13,19,23,8,11]
mat=[[0]*n]*n #initialising a 3*3 matrix
for a in range(n):
for b in range(n):
mat[a][b]=arr[b]
print(mat) #To understand the result of each iteration
if len(arr) >n:
arr=arr[n:]
print(mat)
获得的输出为:
[[16,0,0],[16,0,0],[16,0,0]][[16,13,0],[16,13,0],[16,13,0]]
[16,13,4],[16,13,4],[16,13,4]
[16,13,4],[16,13,4],[16,13,4]
[16,13,4],[16,13,4],[16,13,4]
[[16,13,19],[16,13,19],[16,13,19]]
[[23,13,19],[23,13,19],[23,13,19]]
[[23,8,19],[23,8,19],[23,8,19]]
[23,8,11],[23,8,11],[23,8,11]] 最后: [23,8,11],[23,8,11],[23,8,11]] 而不是: [16,13,4],[16,13,19],[23,8,11]] 为什么每次迭代后整列的值都会改变,而不仅仅是那个单元格
代码中有哪些可能的更改可以产生所需的结果(即,将9个元素的列表转换为3x3矩阵)?您可以使用切片来实现这一点
n=3
twoD_array=[]
arr = [16,13,4,16,13,19,23,8,11]
for i in range(0,len(arr),n):
twoD_array.append(arr[i:i+n])
print(twoD_array)