如何获得 sympy 表达式中出现的操作?例如,对于:2+x**2+exp(7*x)-log(y),我需要返回类似: 的内容["+","**","exp","*","-","log"]。我发现有一种简单的方法来获取变量,使用.free_symbols. 有没有简单的操作方法?我还发现了这个函数:srepr它返回:"Add(Pow(Symbol('x'), Integer(2)), exp(Mul(Integer(7), Symbol('x'))), Mul(Integer(-1), log(Symbol('y'))), Integer(2))"。这包含了我需要的一切,但我不确定如何以有效的方式从那里提取我需要的所有部分?有人能帮我吗?谢谢你!
有多种方法可以实现这一点。以下是一些帮助您入门的演示:
>>> eq
x**2 + exp(7*x) - log(y) + 2
>>> count_ops(eq, visual=True) # expression showing how many of each
2*ADD + EXP + LOG + MUL + POW + SUB
>>> count_ops(eq,visual=True).free_symbols # Symbols
{ADD, EXP, LOG, MUL, POW, SUB}
>>> [i.name for i in count_ops(eq,visual=True).free_symbols] # strings
[MUL, POW, ADD, LOG, EXP, SUB]
>>> [func_name(i) for i in eq.atoms(Basic)]
[Integer, Symbol, Integer, Mul, Symbol, log, exp, Mul, Add, Pow, NegativeOne]
>>> [func_name(i) for i in eq.atoms(Function)]
[log, exp]
Run Code Online (Sandbox Code Playgroud)