我有一个表达式为: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。
发布于 2016-06-02 10:57:20
根据问题和注释,如果可以将表达式作为字符串获得,则如果要避免术语集合,可以这样做。
(sympify("1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2", evaluate=False)).args这将返回所有的条款,而不收集类似的条款。
发布于 2016-06-02 22:17:16
正确的方法是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))发布于 2016-06-01 11:59:24
在这种情况下,非常容易:
>>> 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⎠https://stackoverflow.com/questions/37566132
复制相似问题