我使用以下代码将值输入到嵌套列表/矩阵。但在最后一行中分配了相同的行值。
rows = int(input('Input the rows: '))
cols = int(input('Input the cols: '))
#rows, cols = (5, 5)
arr1 = [[int(0)]*cols]*rows
print(arr1)
for i in range(rows):
for j in range(cols):
arr1[i][j]= int(input('arr1[%d][%d]: '%(i,j)))
print(arr1[i][j])
print(arr1)
我们来吧
>>> Input the rows: 2
>>> Input the cols: 2
那么,
>>>rows
2
>>>cols
2
后记,
arr1[0][0]: 22
arr1[0][1]: 33
arr1[1][0]: 44
arr1[1][1]: 55
终于找到问题了。最后一行元素重复所有前面的行。
>>>print(arr1)
[[44, 55], [44, 55]]
对于更高维度的矩阵也会发生这种情况。
我不希望这种情况发生。相反,我希望不要重复,例如:
>>>print(arr1)
[[22, 33], [44, 55]]
注意:使用 python 3
最佳答案
您遇到了问题:
arr1 = [[int(0)]*cols]*rows
本质上,*
运算符将为可变类型创建同一对象的多个引用。
解决此问题的一种方法是使用推导式(int(0)
中的 int()
调用也是无用的,所以我将跳过它),例如:
arr1 = [[0 for _ in range(cols)] for _ in range(rows)]
或者:
arr1 = [([0] * cols) for _ in range(rows)]
内部 [0] * cols
将按您的预期工作,因为 0
是不可变的。
关于arrays - 嵌套列表最后一行元素重复所有前面的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60692605/