代码中的问题是,当您执行以下操作时:
a = [[0] * row_num] * colum_num
您创建colum_num链接以列出[[0] * row_num].当您更改其中一个列表(在您的for中)时,其他列表也将更改.您可以运行以下代码来了解我的意思
a = [1,2,3]
b = [a] * 3
print(b)
a[1] = 10
print(b)
输出将是[[1、2、3],[1、2、3],[1、2、3]]和[[1、10、3],[1、10、3],[1, 10,3]],因为b只是与a的3个链接.
有多种创建新列表而不创建副本的方法,例如索引整个列表
b = [a[:]] * 3
或使用复制模块
import copy
b = [copy.copy(a)] * 3
或使用生成器表达式创建多个相似(全为0)但是不同对象的列表,如sgbirch建议.
a = [[0 for x in range(column_num)] for y in range(row_num)]
顺便说一句,创建一个全为0的列表是没有意义的,您可以执行以下操作:
row_num = int(input('Please enter matrix row number:'))
column_num = int(input('please enter matrix column number:'))
a = [[int(input()) for x in range(column_num)] for y in range(row_num)]
用户逐行输入矩阵也可能更简单.
a = [[int(x) for x in input('Input row № {} ({} numbers): '.format(y + 1, column_num)).split()] for y in range(row_num)]