如何在Sympy中查找表达式中的所有术语

时间:2016-06-01 10:32:10

标签: python sympy

我的表达式为:1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2

我需要的是一个包含此表达式中的术语的列表 即[1/(x+1), 4*x/(x-1), 3, -4*x**2 , 10*x**2]

更新:它不应该收集类似的条款。因此,在收集类似条款后,列表应分别为-4 * x ** 2和10 * x ** 2而不是6 * x ** 2。

3 个答案:

答案 0 :(得分:2)

正确的方法是Add.make_args。这与Bjoern的答案中的expr.args相同,除非表达式不是Add(单个术语),它仍然给出该术语,而不是遍历该表达式。

In [20]: expr = 1/(x+1)+4*x/(x-1)+3-4*x**2

In [21]: print(Add.make_args(expr))
(3, 1/(x + 1), -4*x**2, 4*x/(x - 1))

答案 1 :(得分:1)

在这种情况下,这很容易:

>>> expr = 1/(x+1)+4*x/(x-1)+3-4*x**2
>>> expr.args
⎛     1        2   4⋅x ⎞
⎜3, ─────, -4⋅x , ─────⎟
⎝   x + 1         x - 1⎠

答案 2 :(得分:1)

根据问题和评论,如果您可以将表达式作为字符串获取,那么如果您想避免使用术语集,则可以执行此类操作。

(sympify("1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2", evaluate=False)).args

这将返回所有条款而不收集类似条款。