我试图在 python 中创建一个大小为 x + 1,y + 1 并具有一些初始值的二维列表。这些初始值是第一行包含数字 0 到 'x',第一列包含数字 0 到 'y'(包括在内)
假设 x 和 y 分别是 3 和 4。
所以我去了: 列表名称 = [范围(0, x + 1)] * (y + 1);
这给了我一个 2d 列表,它有 5 行,每行都是一个数字 0 到 3 的列表,每行(4 列)有 4 个索引:
[[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3]]
我知道此时我有一个二维数组,但每一行都是一个实例,因此如果我更改每一行中的任何值,所有行都会反射(reflect)该更改。因此,为了解决这个问题,我决定将每一行设置为一个新的唯一列表:
for row in listName:
row = range(0, x + 1);
但是我注意到这个好像没有效果,我原来的list就算去了:
for row in listName:
row = ["A", "B", "C", "D"];
赋值前后的打印显示“行”正在发生变化,但在循环之外,我在打印时得到了原始列表。尽管我找到了另一种方法来做我想做的事,但我似乎无法弄清楚为什么会这样。有什么想法吗?
最佳答案
切片分配以修改现有列表,而不是仅仅重新绑定(bind)名称。
row[:] = ...
此外,您构建的内容不正确。
listName = [range(0, x + 1) for z in range(y + 1)]
关于python - 在 python 的二维列表中重新分配行/列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425720/