我想要一个可以比较的函数,无论是评估表达式还是非评估表达式都不同。所以这个:
import sympy.parsing.sympy_parser as spp
string = "x+x"
exp1 = spp.parse_expr(string, evaluate = False)
exp2 = spp.parse_expr(string)
print exp1
print exp2
print exp1 == exp2
应输出
x + x
2*x
False
与string = "x**2+1"
相同的代码应输出
x**2+1
x**2+1
True # But it outputs False here too.
是的,我已阅读the FAQ,但它没有解释如何修复/解决此问题。
答案 0 :(得分:1)
相关问题是https://github.com/sympy/sympy/issues/5904。
evaluate=False
时,args
属性未排序:
>>> a = sympify('x**2 + 1', evaluate=False)
>>> b = sympify('x**2 + 1')
>>> a == b
False
>>> a.args
(x**2, 1)
>>> b.args
(1, x**2)
我不相信(但您应该检查mailing list以确定)有一种内置方法可以解决此问题。最佳方法取决于您通过此比较尝试完成的任务。
https://groups.google.com/forum/#!msg/sympy/LU5DQGJJhfc/_Le_u8UGtx0J的讨论(虽然过时!)建议使用_sorted_args
属性制作自定义比较函数:
>>> a._sorted_args
[1, x**2]
>>> b._sorted_args
[1, x**2]