Python如何按指定列位置重排矩阵字段并补零对齐?
问题排查
原代码的核心问题有3个:
new_matrix初始化为[[]],会凭空多插入一个空列表,导致最终结果首行是空值- 用累加和、位移判断列位置的逻辑完全冗余,和需求的匹配规则不贴合,会出现列错位、长度不匹配的问题
- 逐次insert的方式无法保证最终行长度和arr长度一致,也不能正确补全所有空缺位置的0
实现逻辑说明
需求本质非常简单,不需要复杂的求和、位置计算:
- 目标矩阵每一行长度固定等于arr的长度,所有位置初始填充0
- arr中的值本身就是列对应的标识,源矩阵中的元素值是几,就应该放到arr中对应值的列位置
- 提前构建值到列索引的映射,遍历替换对应位置的0为真实值即可,不需要逐次插入元素
正确实现代码
arr = [1,2,3,4,5,6] matrix = [ [2,3,4], [1,3,6], [2,4,5] ] # 构建值到目标列索引的映射,提升查询效率 col_index_map = {val: idx for idx, val in enumerate(arr)} new_matrix = [] for source_row in matrix: # 初始化当前行,所有位置默认填0 target_row = [0] * len(arr) for val in source_row: # 将元素放到对应列位置 if val in col_index_map: target_row[col_index_map[val]] = val new_matrix.append(target_row) # 打印结果 for row in new_matrix: print(row)
运行输出和预期完全一致:
[0, 2, 3, 4, 0, 0] [1, 0, 3, 0, 0, 6] [0, 2, 0, 4, 5, 0]
内容的提问来源于stack exchange,提问作者Natalia
相关产品推荐
相关产品推荐

