如何评估符号表达式列表
How to evaluate a list of symbolic expressions
我有一个字典 dictionary1
包含如下变量: x1, x2, x3, y1, y2 ..
它们每个都与一个数据结构相关联,其中主要包含数据列表。字典的每个变量都有一个相同大小的整数列表。
我有一个方程式列表:
equationsList = ["x1+2*2", "(x2*3)+4","x3+6*y1", "(x4*3)+y2"] #etc ...
我的想法是用相关值替换字典中识别的字符串,以便将公式应用于列表的每个元素:
for equation in equationList:
for item in equation.split():
if item in dictionary1:
for ValueElement in dictionary1[item].ValueList:
equation = re.sub(item, str(ValueElement), equation)
ValueElement = eval(equation)
当字典中只有一个变量(x 或 y)时,我的代码可以完美运行,但当涉及到包含 2 个以上变量的方程时,只有第一个变量被替换。
使用 sympy 你可以做到这一点:
from sympy import symbols, sympify
x1, x2, x3, x4, y1, y2 = symbols('x1 x2 x3 x4 y1 y2')
equationsList = ["x1+2*2", "(x2*3)+4", "x3+6*y1", "(x4*3)+y2"]
expressions = [sympify(expr) for expr in equationsList]
values = {x1: 1, x2: 2, x3: 3, x4: 4, y1: -1, y2: -2}
for expression in expressions:
print('{:10s} -> {:4d}'.format(str(expression),
int(expression.subs(values))))
将输出
x1 + 4 -> 5
3*x2 + 4 -> 10
x3 + 6*y1 -> -3
3*x4 + y2 -> 10
我有一个字典 dictionary1
包含如下变量: x1, x2, x3, y1, y2 ..
它们每个都与一个数据结构相关联,其中主要包含数据列表。字典的每个变量都有一个相同大小的整数列表。
我有一个方程式列表:
equationsList = ["x1+2*2", "(x2*3)+4","x3+6*y1", "(x4*3)+y2"] #etc ...
我的想法是用相关值替换字典中识别的字符串,以便将公式应用于列表的每个元素:
for equation in equationList:
for item in equation.split():
if item in dictionary1:
for ValueElement in dictionary1[item].ValueList:
equation = re.sub(item, str(ValueElement), equation)
ValueElement = eval(equation)
当字典中只有一个变量(x 或 y)时,我的代码可以完美运行,但当涉及到包含 2 个以上变量的方程时,只有第一个变量被替换。
使用 sympy 你可以做到这一点:
from sympy import symbols, sympify
x1, x2, x3, x4, y1, y2 = symbols('x1 x2 x3 x4 y1 y2')
equationsList = ["x1+2*2", "(x2*3)+4", "x3+6*y1", "(x4*3)+y2"]
expressions = [sympify(expr) for expr in equationsList]
values = {x1: 1, x2: 2, x3: 3, x4: 4, y1: -1, y2: -2}
for expression in expressions:
print('{:10s} -> {:4d}'.format(str(expression),
int(expression.subs(values))))
将输出
x1 + 4 -> 5
3*x2 + 4 -> 10
x3 + 6*y1 -> -3
3*x4 + y2 -> 10