如何在Python中将总和分成几个部分而不转换为字符串

sim*_*mon 2 python sympy

假设我有一些表达

from sympy import *
a,b,c,x,y = symbols('a c b x y') 
eq=a*x + b*x*y + c*y**2
Run Code Online (Sandbox Code Playgroud)

需要分成一个包含单项式的数组。

我目前的解决方案是

parts = str(eq).split(' + ')
Run Code Online (Sandbox Code Playgroud)

然后,我对数组部分的每个元素使用 eval 函数,将其解释为表达式。

我可以做什么来将多元多项式拆分为单项式部分,而不先将表达式转换为字符串?

小智 5

您可以使用and探索sympy.func.args表达式:

eq.func
> <class 'sympy.core.add.Add'>
eq.args
> (a*x, b*y**2, c*x*y)
Run Code Online (Sandbox Code Playgroud)

这些参数中的每一个都是sympy表达式,可以用相同的方式进行探索:

eq.args[0].func
> <class 'sympy.core.mul.Mul'
eq.args[0].args
> (a, x)
Run Code Online (Sandbox Code Playgroud)

等等。请注意,在表达式树的最终级别,您将需要除.func和之外的其他函数.args,例如:

eq.args[0].args[0].name  # the a in a*x
> 'a'
eq.args[1].args[1].args[1].n()  # the 2 in y**2
> 2.00000000000000
Run Code Online (Sandbox Code Playgroud)