是否有一个sympy函数可以将Add
,Mul
和Div
表达式的等式的所有项提取为列表或集合?
例如:
(x**2 +(x-1)*ln(x)+(x+2)/(x-1))
我想得到:
[x**2,(x+1)*ln(x),(x+2)/(x-1)]
与穆尔一样:
(x-1)*ln(x) : [(x-1),ln(x)]
和Divison:
(x+2)/(x-1) : [x+2,x-1]
答案 0 :(得分:2)
对于总和或产品,您可以使用expr.args
:
In [1]: ((x**2 +(x-1)*ln(x)+(x+2)/(x-1))).args
Out[1]:
⎛ 2 x + 2 ⎞
⎜x , ─────, (x - 1)⋅log(x)⎟
⎝ x - 1 ⎠
In [2]: ((x-1)*ln(x)).args
Out[2]: (x - 1, log(x))
对于某个部门,SymPy将x/y
表示为x*y**-1
(没有分组类,只有Mul
和Pow
)。
In [3]: ((x+2)/(x-1)).args
Out[3]:
⎛ 1 ⎞
⎜─────, x + 2⎟
⎝x - 1 ⎠
但是,您可以使用fraction
将其拆分
In [4]: fraction((x+2)/(x-1))
Out[4]: (x + 2, x - 1)