小编典典

在python中更改二维数组的每个值

all

我有一个像这样的矩阵:

matrix = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
]

我必须根据公式 (2 * i + 3 * j) mod 6 为每个元素分配一个值,其中 i 和 j 是索引。我正在使用以下代码进行迭代和赋值:

for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        matrix[i][j] = (((2 * i) + (3 * j)) % 6)

但我有这个输出:

matrix = [
    [4, 1, 4],
    [4, 1, 4],
    [4, 1, 4]
]

而不是预期的:

matrix = [
    [0, 3, 0],
    [2, 5, 2],
    [4, 1, 4]
]

我该如何解决这个问题?另外,我不能使用 NumPy 来解决这个问题。


阅读 223

收藏
2022-08-03

共1个答案

小编典典

这不是您创建阵列的方式!如果你这样做了,它会起作用的。你所做的是

matrix = [[0]*3]*3

这为您提供了对单个列表对象的三个引用,而不是三个单独的列表对象。将其初始化为

matrix = [[0]*3 for _ in range(3)]

或者更好的是,使用 numpy.

2022-08-03