【问题标题】:How to evaluate a list of symbolic expressions [duplicate]如何评估符号表达式列表[重复]
【发布时间】:2017-04-20 15:19:49
【问题描述】:

我有一个字典dictionary1,其中包含以下变量:x1, x2, x3, y1, y2 ..,它们每个都与一个主要包含数据列表的数据结构相关联。 dict 的每个变量都有一个相同大小的整数列表。

我有一个方程式列表:

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 个以上变量的方程时,只有第一个被替换。

【问题讨论】:

  • 你试过用谷歌搜索这个吗?到目前为止,我至少找到了 3 个相关的 SO 帖子。

标签: python math eval mathematical-expressions


【解决方案1】:

使用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

【讨论】:

  • 哦,是的,这个库似乎对我的情况非常有用,如果我尝试使用列表作为符号,你认为它会起作用吗?
  • 如果您还不想安装,可以直接在他们的网站上试用。
猜你喜欢
  • 1970-01-01
  • 2020-07-08
  • 2010-10-22
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多