You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python求矩阵行列式时pop()同时修改两个列表如何解决?

矩阵行列式计算代码问题修复

问题核心原因

你用到的m[:][:]属于浅拷贝,仅复制了二维列表的外层结构,内层存储每行数据的子列表仍然和原矩阵m共享引用,所以修改y[j]子列表的元素时,会同步修改原矩阵m的对应数据。

除此之外你的代码还存在几个影响运行的隐性问题:

  • 可变默认参数y=[]会在多次调用函数时残留之前的计算数据,引发未知错误
  • 没有递归终止条件,当矩阵缩小到1x1大小时会直接报错
  • 幂运算优先级错误:-1**(1+i)会优先计算1**(1+i)再添加负号,最终结果永远为-1,不符合余子式的符号规则
  • 内层删除列的y[j].pop(i)没有正确缩进,不属于for j循环的执行体

修复方案

  1. 把浅拷贝替换为逐行深拷贝,保证修改子列表不影响原矩阵
  2. 补充递归终止条件:1x1矩阵直接返回唯一元素
  3. 修正符号计算的括号,保证负号参与幂运算
  4. 删除无用的可变默认参数,修正缩进错误

修复后可运行代码

def deff(m):
    # 递归终止条件:1x1矩阵直接返回元素值
    if len(m) == 1:
        return m[0][0]
    x = 0
    for i in range(len(m)):
        # 逐行拷贝实现二维列表深拷贝
        y = [row[:] for row in m]
        k = y[0][i]
        # 删除第一行
        y.pop(0)
        # 删除对应列
        for j in range(len(y)):
            y[j].pop(i)
        # 修正符号计算的括号
        x += k * deff(y) * ((-1) ** (1 + i))
    return x

测试示例

你可以用二阶矩阵验证计算结果:

# 二阶矩阵[[1,2],[3,4]]的行列式应为 1*4 - 2*3 = -2
print(deff([[1,2],[3,4]])) # 输出-2,计算正确

内容的提问来源于stack exchange,提问作者ONIMEXA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:15:03