在Python列表中修改一个元素时出现错误
在Python列表中修改一个元素时出现错误
我正在尝试更改Python列表中的一个元素。根据https://www.programiz.com/python-programming/matrix上的教程,我编写了以下代码。
matrix = [[0]*6]*3 print(matrix) matrix[0][0] = 2 print(matrix)
运行代码后,我收到以下输出:
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] [[2, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0]]
请注意输出的最后一行,每个子列表的第一个元素都被设置为2
。我该如何只更改第一个列表的第一个元素。
错误的原因是每个矩阵的行不是一个独立的数组,而是对同一个数组的引用。这是因为在Python中,列表是按引用传递的,而不是复制每个单独的值。
在代码的第二部分中,实际上你所做的是:
row = [0] * 6 matrix = [row, row, row]
你可能会更好地使用以下代码:
matrix = [[0 for _ in range(6)] for _ in range(3)] matrix[0][0] = 2
这将为创建矩阵中的每一行创建一个新的由0填充的数组。
这样做的结果是:
[[2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]
通过这种方法,你可以创建一个独立的数组来构成矩阵的每一行,而不是使用对同一个数组的引用。这样,当你修改一个元素时,不会影响到其他行。