2017-04-20 134 views
0

我有一個包含變量的字典dictionary1x1, 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+變量的方程式時,只有第一個變量被替換。

+0

您是否嘗試過谷歌搜索這裏面?至今我發現至少有3個相關的SO帖子。 – Sheljohn

回答

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 
+0

哦,是啊這個圖書館似乎對我的情況非常有用,你認爲它會工作,如果我嘗試與列表作爲符號? –

+0

如果你不想安裝它,你可以直接在他們的網站上嘗試。 –