Sympy不会评估2x但会评估x*2

sle*_*mes 6 python math sympy

我正在使用Sympysympify函数来简化2个表达式,所以我可以比较它们的相等性.

例如:

expr1 = sympify("(2 * x) + (x + 10)")
expr2 = sympify("(x + 10) + (x * 2)")

if expr1 == expr2:
   print "Congrats those are essentially the same!"
Run Code Online (Sandbox Code Playgroud)

但是当使用表格2x作为x*2时,我得到一个解析异常,例如:

expr1 = sympify("2x + (x + 10)")
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让我很同意理解2x表格吗?

如果没有,是否有其他库允许此表格?

tan*_*orm 3

好吧,您可以修改 sympy 词法分析器(或解析器/语法/其他)。

您还可以使用一个为您转换输入字符串的函数来包装它,使用如下所示:

>>> import re
>>> expr = '2x + 1'
>>> re.sub(r"(\d+)(\w+)", r"(\1 * \2)", expr)
'(2 * x) + 1'
Run Code Online (Sandbox Code Playgroud)

但问问自己为什么一开始就没有这个符号。

例如,所有这些都是有效的 python,虽然自从我搞乱 sympy 以来已经很长一段时间了,但我敢打赌它们除了 sympy 中的乘法之外还有其他含义:

0x32  # hex for 50
5e-3  # 0.005
2j    # 2 * sqrt(-1) (so that one *is* multiplication, but by 1j, not j!)
15L   # 15 (L used to represent long integers in python)
Run Code Online (Sandbox Code Playgroud)

是什么x2意思?它是一个名为的变量x2还是它的意思(x * 2)。我故意将这种情况排除在上面的正则表达式之外,因为它非常模糊。