Python 如何在symphy中找到表达式中的所有项

Python 如何在symphy中找到表达式中的所有项,python,sympy,Python,Sympy,我有一个表达式:1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2 我需要的是一个包含此表达式中的术语的列表。 i、 e.[1/(x+1),4*x/(x-1),3,-4*x**2,10*x**2] 更新:它不应收集类似的术语。因此,在收集类似术语后,列表应分别具有-4*x**2和10*x**2,而不是6*x**2。在这种情况下,很容易: >>> expr = 1/(x+1)+4*x/(x-1)+3-4*x**2 >>> expr.args ⎛

我有一个表达式:
1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2

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


更新:它不应收集类似的术语。因此,在收集类似术语后,列表应分别具有-4*x**2和10*x**2,而不是6*x**2。

在这种情况下,很容易:

>>> 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⎠

根据问题和注释,如果可以将表达式作为字符串获取,则如果希望避免术语集合,可以执行类似操作

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

这将返回所有术语,而不收集类似术语。

正确的方法是添加.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))

谢谢@Bjoern,但是如果有类似的术语,args会收集它们。(例如1/(x+1)+4*x/(x-1)+3-4*x2+10*x2)。有可能停止吗?@fermiparadoxo是的,没有引号。抱歉搞混了。@harsh Offtopic:你是说
1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2
?(双精度*之间的文本转换为粗体,除非您将其放在代码格式``中)@harsh它实际上不是收集它们的
.args
,它发生在构造时,请尝试:
添加(1/(x+1),4*x/(x-1),3,-4*x**2,10*x**2,evaluate=False)
@asmurer谢谢,但这与我在下面的评论中添加的@Bjoern有相同的问题。我的答案中的列表与您在问题中指出的列表相同(除了重新排序)。如果重新排序是个问题,恐怕你运气不好,因为SymPy不跟踪表达式的顺序。如果是其他问题,请编辑您的问题并澄清。如果不清楚,我很抱歉。我不想收集类似的术语。我更新了问题。对不起,我把你弄糊涂了。把它当作一根绳子就行了。