如何在同情中轻推替换

时间:2014-12-17 08:58:06

标签: python sympy

我有以下内容,其中a,b,c,d都是同情符号

p = a + b + 2*c + d
q = a + b + c + d

我想这样做:

p = p.subs(a + b + c + d, q)

想要得到这个:

p = q + c

但是p保持不变。

我应该怎么做才能达到p = q + c?

subs()执行的匹配似乎正在寻找严格的排序,因此它没有拆分'2 * c'项。

我应该使用replace()而不是subs()。

编辑: 代码如下:

import sympy

a, b, c, d = sympy.symbols('a,b,c,d')

p = a + b + 2*c + d
q = a + b + c + d

r = p.subs(a + b + c + d, q)

print r

编辑#2

https://groups.google.com/forum/#!topic/sympy/b_Yv6s15Y0Q

我的问题类似于groups.google链接,只是在那种情况下subs()完成它的工作。

1 个答案:

答案 0 :(得分:2)

首先评论一下你的代码:因为你将q定义为a + b + c + d之和,你永远不会看到变化,即使它确实有效(但它没有)。其他有效的方法如下:

>>> p = a + b + 2*c + d
>>> q = var('q')
>>> p.extract_additively(a+b+c+d) + q
c + q

还有一个extract_multiplicatively方法。