我已经try 了几种有效的方法.但这一次却并非如此. 请告诉我为什么?

row, col = 2, 3
mat1 = [[None]*col]*row
print(mat1)
for i in range(0, row):
    for j in range(0, col):
        mat1[i][j] = int(input())
print(mat1)

输入:

1
2
3
4
5
6

预期:

[[1,2,3], [4,5,6]]

获得:

[[4,5,6], [4,5,6]]

推荐答案

当您使用*运算符创建矩阵mat1时,问题出现在第2行.

[[None]*3]*2定义的两个[[None]*col]的批次引用了内存中的相同列表-这就是为什么修改第二个列表(意外地)会导致第一个列表也被修改.

另一个例子:

>>> a = [[1, 2]*2]*3
>>> a
[[1, 2, 1, 2], [1, 2, 1, 2], [1, 2, 1, 2]]

>>> a[0][2] = 3
>>> a[0][3] = 4
>>> a
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]

正如您所看到的,更改a[0]会导致其他两个列表也发生更改.

正如其他答案所指出的,这可以通过列表理解来解决:

mat1 = [[None for _ in range(col)] for _ in range(row)]

Python相关问答推荐

从不规则形状区域返回使用openCV跟踪的对象的着陆位置

Pandas 修改原始excel

双情节在单个图上切换-pPython

如何在Python中增量更新DF

使用argsorted索引子集索引数组

过滤绕轴旋转的螺旋桨

Python无法在已导入的目录中看到新模块

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

Python中的函数中是否有充分的理由接受float而不接受int?

如何计算列表列行之间的公共元素

如何让程序打印新段落上的每一行?

用合并列替换现有列并重命名

如何在solve()之后获得症状上的等式的值

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

运输问题分支定界法&

如何在WSL2中更新Python到最新版本(3.12.2)?

如何启动下载并在不击中磁盘的情况下呈现响应?

如何指定列数据类型

基于行条件计算(pandas)

找到相对于列表索引的当前最大值列表""