Python利润值分解构建结果表:线性方程组求解与报错修复
问题修复方案
错误原因分析
IndexError: list assignment index out of range 通常是因为结果表初始化时的行数/列数不足,或者循环时访问了超出列表长度的索引。比如原代码可能只创建了和原表格同维度的结果表,没新增最后一行一列;或者循环索引没控制在正确范围内。
修复后代码实现
步骤说明
- 先获取原表格的行数
m和列数n - 初始化结果表:行数为
m+1,列数为n+1,默认填充为0(或根据需求用None) - 复制分配表的原有内容到结果表的前
m行、前n列 - 遍历每个单元格,若分配表中该位置非
None,则拆分对应利润值为X和Y(满足X+Y=原利润),将X存入结果表最后一行的对应列,Y存入结果表对应行的最后一列
代码示例
# 示例数据:利润表和分配表(同维度) tabla_ganancias = [ [150, 240, None], [300, None, 180], [None, 90, 210] ] tabla_asignaciones = [ [True, None, True], [None, False, True], [True, True, None] ] # 获取原表格维度 m = len(tabla_ganancias) n = len(tabla_ganancias[0]) if m > 0 else 0 # 初始化结果表:m+1行,n+1列,默认填0 tabla_resultado = [[0 for _ in range(n+1)] for _ in range(m+1)] # 复制分配表内容到结果表前m行前n列 for i in range(m): for j in range(n): tabla_resultado[i][j] = tabla_asignaciones[i][j] # 处理利润拆分 for i in range(m): for j in range(n): if tabla_asignaciones[i][j] is not None: ganancia = tabla_ganancias[i][j] if ganancia is None: continue # 利润表对应位置无值则跳过 # 拆分X和Y,这里示例按整数拆分,可根据需求调整规则 X = ganancia // 2 Y = ganancia - X # 存入结果表:X到最后一行对应列,Y到对应行最后一列 tabla_resultado[m][j] = X tabla_resultado[i][n] = Y # 打印结果表验证 for fila in tabla_resultado: print(fila)
关键修复点
- 确保结果表的行数是
m+1、列数是n+1,从根源避免索引越界 - 循环时严格控制
i的范围是0到m-1,j的范围是0到n-1,访问最后一行用m,最后一列用n - 先完成分配表内容复制,再处理利润拆分,避免覆盖结果数据
内容的提问来源于stack exchange,提问作者Elektvocal95
相关产品推荐
相关产品推荐

