arrays - 嵌套列表最后一行元素重复所有前面的行

标签 arrays python-3.x list matrix

我使用以下代码将值输入到嵌套列表/矩阵。但在最后一行中分配了相同的行值。

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/

相关文章:

arrays - 为Kotlin中的每个元素增值

arrays - 错误 438 对象不支持此属性或方法 - 带字典的类对象

c - 6*6 阵列中可能的最大沙漏总和

python - 无法从 Redshift 读取列名包含空格的数据

python - 使用两个嵌套 for 循环打印两个列表的公共(public)元素

python - 为什么 `mylist[:] = reversed(mylist)` 有效?

list - 基于kotlin中的另一个ArrayList对ArrayList进行排序

javascript - 数据表中数组变量的粒度操作

arrays - 从函数返回字符串时需要澄清

python-3.x - 具有用户级输入的python pandas Dataframe