确定 SymPy 表达式的各个项

Determine individual terms of SymPy expression

对于我正在从事的项目,我必须 select 来自任意 SymPy 表达式的特定术语。为此,我使用 .args 如果表达式由多个不同的项组成,它工作正常,但如果只有一个项存在,则 returns 项中的各个系数。请参阅以下示例:

import sympy as sym

x, c0, c1 = sym.symbols('x c0 c1')

f0 = c0*x
f1 = c1*x**2
f2 = c0*x + c1*x**2

print(f0.args) # Output: (c0, x)    Desired: (c0*x)
print(f1.args) # Output: (c1, x**2) Desired: (c1*x**2)
print(f2.args) # Output: (c0*x, c1*x**2)

此方法在 f2 returns (c0*x, c1*x**2) 中的效果与我希望的一样。对于 f0f1 然而它 returns 系数 c0, c1x 分开。我将如何实现所需的输出,对于单项表达式,系数和 x 也作为乘法表达式返回?

请注意,理想情况下,我希望此方法适用于任何形式的表达式,对 x 和任意数量的系数具有任意依赖性。

你需要使用poly来说明你有多项式的事实:

import sympy as sym
from sympy import symbols, Poly


x, c0, c1 = sym.symbols('x c0 c1')

f0 = sym.poly(c0*x)
f1 = sym.poly(c1*x**2)
f2 = c0*x + c1*x**2

print(f0.args) # Output: (c0, x)    Desired: (c0*x)
print(f1.args) # Output: (c1, x**2) Desired: (c1*x**2)
print(f2.args) # Output: (c0*x, c1*x**2)

returns

(c0*x, x, c0)
(c1*x**2, x, c1)
(c0*x, c1*x**2)

要获得单字,只需使用

f0.args[0]

这给出了

c0*x

归功于 。由于我不能接受他们的评论作为答案,所以我在这里重新发布它,同时也提供了一个具体的例子。

“您可以使用 Add.make_args(f0)

这看起来像这样:

import sympy as sym

x, c0, c1 = sym.symbols('x c0 c1')

f0 = c0*x
f1 = c1*x**2
f2 = c0*x + c1*x**2

print(sym.Add.make_args(f0))
print(sym.Add.make_args(f1))
print(sym.Add.make_args(f2))

哪个 return:

(c0*x,)
(c1*x**2,)
(c0*x, c1*x**2)