Python用列表列表填充矩阵时赋值异常问题求助
Python矩阵赋值覆盖问题修复方案
问题根源
你碰到的赋值覆盖问题,大概率是矩阵初始化方式错了。比如要是用了这种写法:
rows = len(temp[0]) cols = len(temp) matrix = [[0]*cols] * rows
生成的矩阵里,所有行都是同一个列表的引用——改任意一行的元素,其他行都会跟着变,本质是它们指向同一块内存空间,不是独立的行。
修复步骤
- 正确初始化独立行矩阵
用列表推导式创建矩阵,保证每一行都是全新的列表,互相不影响:
rows = len(temp[0]) cols = len(temp) matrix = [[0 for _ in range(cols)] for _ in range(rows)]
- 检查索引重复问题
如果用上述方法后还是有覆盖,那得确认int(temp[i])-1(你写的test[i]应该是temp[i]?)计算出的行索引是否重复。要是不同的i算出同一个row_idx,后面的i+1自然会把前面的值覆盖——这时候得检查temp里的数值是否有重复,或者调整索引计算逻辑,确保每个row_idx只对应一个i。
小案例验证
拿个简单例子测试,比如temp是[[1,3], [2,4]],要生成2行2列的矩阵:
temp = [[1,3], [2,4]] # 错误初始化演示 matrix_bad = [[0]*2]*2 for i in range(len(temp)): row_idx = int(temp[i][0]) - 1 matrix_bad[row_idx][0] = i + 1 print(matrix_bad) # 输出 [[2, 0], [2, 0]],两行被同时修改 # 正确初始化演示 matrix_good = [[0 for _ in range(2)] for _ in range(2)] for i in range(len(temp)): row_idx = int(temp[i][0]) - 1 matrix_good[row_idx][0] = i + 1 print(matrix_good) # 输出 [[1, 0], [2, 0]],符合预期
内容的提问来源于stack exchange,提问作者AllinTheSauce
相关产品推荐
相关产品推荐

