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

Sympy技术问询:是否存在仅提取乘积因式、不处理和式的函数?

Sympy表达式因式处理问题解决

问题分析

你当前的代码未区分表达式类型,导致逻辑错误:

  • 针对乘积式(Mul类型),.args返回各因式,此时判断q**2 in expr.args是合理的;
  • 针对和式(Add类型),.args返回相加的子项,这会误将q**2判定为"因式",触发错误逻辑。

修正后的代码

先判断表达式是否为乘积类型,再执行删除逻辑:

from sympy import Mul

if isinstance(expr, Mul) and q**2 in expr.args:        
    expr = expr.func(*[term for term in expr.args if term != q**2])
else:
    expr = expr*2

提取因式的专用函数

Sympy提供两个直接满足需求的函数:

  • as_ordered_factors():返回乘积表达式的有序因式列表,仅处理乘积结构,不会拆解和式。例如对(x**2+1)*(x**2)*(x+4)调用该方法,会得到[x**2, x**2 + 1, x + 4];对和式x**2+1+x+4调用则返回[x**2 + x + 5](合并同类项后作为单一整体)。
  • factor_list():返回元组(常数项, [(因式1, 指数1), (因式2, 指数2), ...]),仅分解乘积结构,不处理和式内部。例如对(x**2+1)*(x**2)**2*(x+4)调用,会得到(1, [(x**2, 2), (x**2 + 1, 1), (x + 4, 1)])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:46:01