执行Sympify时,表达式的顺序被切换(Python的Sympy)
When Sympify is executed, the order of expressions is switched (Python's Sympy)
我运行下面的程序
from sympy import *
str = "Abs(a)*(β-α)**3/6"
print(str)
print(sympify(str))
执行结果如下
Abs(a)*(β-α)**3/6
(-α + β)**3*Abs(a)/6
作为执行 sympify
的结果,表达式的顺序发生了变化。
我要匹配执行结果如下
Abs(a)*(β-α)**3/6
Abs(a)*(β-α)**3/6
我该怎么办?
之所以要这样做,是因为我不想在将表达式转换为 mathml 格式时让它看起来很奇怪。
str = "Abs(a)*(β-α)**3/6"
print(mathml(sympify(str),printer='presentation'))
执行上面的程序,输出如下。
<mrow><mfrac><mrow><msup><mfenced><mrow><mrow><mo>-</mo><mi>α</mi></mrow><mo>+</mo><mi>β</mi></mrow></mfenced><mn>3</mn></msup><mo>⁢</mo><mrow><mfenced clos
e="|" open="|"><mi>a</mi></mfenced></mrow></mrow><mn>6</mn></mfrac></mrow>
看起来像下图。
我希望公式如下图所示。
如果您将以下差异应用到 SymPy,我认为您的情况会奏效:
diff --git a/sympy/printing/str.py b/sympy/printing/str.py
index ee560ca..cb0db5e 100644
--- a/sympy/printing/str.py
+++ b/sympy/printing/str.py
@@ -51,6 +51,8 @@ def _print_Add(self, expr, order=None):
PREC = precedence(expr)
l = []
+ if len(terms) == 2 and str(terms[0])[0] == '-' and str(terms[1])[0] != '-':
+ terms.reverse()
for term in terms:
t = self._print(term)
if t.startswith('-'):
(它打印 b - a
与 -a + b
相同,而不是更改后的 -a + b
。)
我运行下面的程序
from sympy import *
str = "Abs(a)*(β-α)**3/6"
print(str)
print(sympify(str))
执行结果如下
Abs(a)*(β-α)**3/6
(-α + β)**3*Abs(a)/6
作为执行 sympify
的结果,表达式的顺序发生了变化。
我要匹配执行结果如下
Abs(a)*(β-α)**3/6
Abs(a)*(β-α)**3/6
我该怎么办?
之所以要这样做,是因为我不想在将表达式转换为 mathml 格式时让它看起来很奇怪。
str = "Abs(a)*(β-α)**3/6"
print(mathml(sympify(str),printer='presentation'))
执行上面的程序,输出如下。
<mrow><mfrac><mrow><msup><mfenced><mrow><mrow><mo>-</mo><mi>α</mi></mrow><mo>+</mo><mi>β</mi></mrow></mfenced><mn>3</mn></msup><mo>⁢</mo><mrow><mfenced clos
e="|" open="|"><mi>a</mi></mfenced></mrow></mrow><mn>6</mn></mfrac></mrow>
看起来像下图。
我希望公式如下图所示。
如果您将以下差异应用到 SymPy,我认为您的情况会奏效:
diff --git a/sympy/printing/str.py b/sympy/printing/str.py
index ee560ca..cb0db5e 100644
--- a/sympy/printing/str.py
+++ b/sympy/printing/str.py
@@ -51,6 +51,8 @@ def _print_Add(self, expr, order=None):
PREC = precedence(expr)
l = []
+ if len(terms) == 2 and str(terms[0])[0] == '-' and str(terms[1])[0] != '-':
+ terms.reverse()
for term in terms:
t = self._print(term)
if t.startswith('-'):
(它打印 b - a
与 -a + b
相同,而不是更改后的 -a + b
。)