2016-06-28 111 views
5

在表达类似SymPy:交换两个变量

import sympy 

a = sympy.Symbol('a') 
b = sympy.Symbol('b') 

x = a + 2*b 

我想换ab检索b + 2*a。我试图

y = x.subs([(a, b), (b, a)]) 
y = x.subs({a: b, b: a}) 

但既不工程;在两种情况下结果为3*a,因为某些原因,b首先被替换。

任何提示?

回答

4

有一个simultaneous参数可以传递给替换,这将确保所有替换同时发生,并且不会像他们现在正在做的那样相互干扰。

y = x.subs({a:b, b:a}, simultaneous=True) 

输出

2*a + b 

From the docs for subs

如果关键字simultaneousTrue,直到所有的替代已作出子表达式将不进行评估。