2016-08-04 42 views
2

是否有sympy函数将表达式的所有表达式的公式提取为Add,MulDiv提取表达式的条件

例如:

(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

可以使用AST模块。 –

+1

@JoseRaulBarreras他可以使用AST,但很可能_不应_。使用现有的SymPy工具会更容易*。 (“容易得多”我的意思是容易上千倍)。 –

回答

1

一笔或产品,你可以使用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/yx*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)