Simple Infix to Postfix in Python
Today I wrote a Python program to transform an expression to reverse polish notation in order to solve the problem Transform the Expression and it worked fine. Here is my code:
def rpn(s): var_list = [] symb_list = [] for c in s: if c >= 'a' and c <= 'z': var_list.append(c) elif c in ['^', '*', '/', '+', '-']: symb_list.append(c) elif c == ')': x = var_list.pop() y = var_list.pop() z = symb_list.pop() var_list.append(y + x + z) #print var_list, symb_list return var_list[0] t = int(raw_input()) while t: t -= 1 s = raw_input() print rpn(s)The algorithm is very simple which you should be able to follow if you study my code. You can uncomment the line
#print var_list, symb_list
to see a simulation. Note that the Python program I wrote is not the perfect infix to postfix converter but it worked for the problem. The ideal program should work without taking the advantage of brackets. :-)
Comments
>>> timeit.timeit('"c".isalpha()', number=100000)
0.010938495863229036
>>> timeit.timeit('"c" >= "a" and "c" <= "z"', number=100000)
0.00959616294130683
>>> timeit.timeit('"c" >= "a" and "c" <= "z"', number=100000)
0.011491957120597363
>>> timeit.timeit('"c".isalpha()', number=100000)
0.01122324913740158
>>>