2017-04-20 24 views
0

다음과 같은 변수가 포함 된 dictionary1 사전이 있습니다. x1, x2, x3, y1, y2 .. 이들은 대부분 데이터 목록이 포함 된 데이터 구조와 각각 연결되어 있습니다. dict의 각 변수에는 동일한 크기의 정수 목록이 있습니다.기호식 목록을 계산하는 방법

I는 식의 목록을 가지고 :

: 내 생각이 목록의 모든 요소에 공식을 적용하기 위해 관련 값에 의해 사전에 인식 된 문자열을 교체했다
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 개 이상 있습니다. – 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

아직 설치하지 않으려는 경우 웹 사이트에서 직접 사용해 볼 수 있습니다. –