提取表达式的术语

时间:2016-08-04 00:03:40

标签: python sympy

是否有一个sympy函数可以将AddMulDiv表达式的等式的所有项提取为列表或集合?

例如:

(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)]

和Div​​ison:

(x+2)/(x-1) : [x+2,x-1]

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(没有分组类,只有MulPow)。

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)