如何修正Python代码得到正确排序的matrix_aux_ord并生成new_matrix
Python矩阵排序与合并修正方案
问题核心
原代码仅对matrix_aux的数据行按子列表中1.0的首次出现位置排序,但未同步排序标题行,导致排序后的matrix_aux_ord结构混乱。
修正步骤与代码实现
步骤1:同步排序标题行与数据行
将标题行与对应数据行绑定为整体,按照数据行中1.0的首次索引位置排序,再拆分回标题行和数据行,得到正确的matrix_aux_ord。
# 假设matrix_aux结构为:[标题行, 数据行1, 数据行2, ...] # 拆分标题行与数据行 header = matrix_aux[0] data_rows = matrix_aux[1:] # 绑定标题与对应数据行,按数据行中1.0的首次出现位置排序 # 若子列表无1.0,用子列表长度作为排序键,让这类行排到最后 sorted_pairs = sorted(zip(header, data_rows), key=lambda x: x[1].index(1.0) if 1.0 in x[1] else len(x[1])) # 拆分回排序后的标题行和数据行,重组matrix_aux_ord sorted_header, sorted_data = zip(*sorted_pairs) matrix_aux_ord = [list(sorted_header)] + list(sorted_data)
步骤2:合并生成目标矩阵new_matrix
将排序后的matrix_aux_ord与原matrix合并:首行添加'X',其余行依次添加matrix_aux_ord首行的对应元素。
new_matrix = [] # 处理首行:前置'X' new_matrix.append(['X'] + matrix[0]) # 处理其余行:依次添加matrix_aux_ord首行的对应元素 for idx in range(1, len(matrix)): # 处理行数不一致的边界情况,避免索引越界 aux_val = matrix_aux_ord[0][idx-1] if (idx-1) < len(matrix_aux_ord[0]) else '' new_matrix.append([aux_val] + matrix[idx])
关键说明
- 用
zip(header, data_rows)绑定标题与数据行,确保排序后两者的对应关系不丢失。 - 对无
1.0的数据行设置兜底排序键,保证整体排序逻辑的完整性。 - 合并时加入索引越界判断,避免因原矩阵与
matrix_aux_ord行数不一致导致报错。
内容的提问来源于stack exchange,提问作者Elektvocal95
相关产品推荐
相关产品推荐

