我有以下内容,其中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()完成它的工作。
答案 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方法。