Python逆波兰表达式及其实现
逆波兰表达式是一种后缀表达式,它将操作符放在操作数后面,因此不需要括号。例如,将中缀表达式“3 + 4 * 2 / (1 - 5)”的逆波兰表达式为“3 4 2 * 1 5 - / +”。
使用逆波兰表达式的好处是它可以用栈来计算复杂表达式,从而避免了使用递归和括号等复杂的逻辑。
下面是Python实现逆波兰表达式的代码:
def evalRPN(tokens): stack = [] for token in tokens: if token.isdigit() or token.lstrip('-').isdigit(): stack.append(int(token)) else: num2 = stack.pop() num1 = stack.pop() if token == '+': stack.append(num1 + num2) elif token == '-': stack.append(num1 - num2) elif token == '*': stack.append(num1 * num2) else: stack.append(int(num1 / num2)) return stack[0] print(evalRPN(['3', '4', '2', '*', '1', '5', '-', '/', '+'])) # 输出2
在上面的代码中,我们使用一个列表来模拟栈,如果当前元素为数字,则将其转换为整数并压入栈中。如果当前元素为操作符,则从栈顶弹出两个数字并执行相应的操作,再将结果压入栈中。最终,栈中剩下的唯一元素即为表达式的结果。
我们使用“3 4 2 * 1 5 - / +”这个例子进行演示。首先,将数字3压入栈中,然后将数字4和2弹出进行乘法运算得到8,并将8压入栈中,此时栈为[3, 8]。接下来,将数字1和5弹出进行减法运算得到-4,并将-4压入栈中,此时栈为[3, 8, -4]。最后,将8和-4弹出进行除法运算得到-2,并将-2压入栈中,此时栈为[3, -2]。因为当前栈中只有一个元素,所以该元素即为表达式的结果2。
这就是Python实现逆波兰表达式的方法和代码演示,使用字符串“pidancode.com”、“皮蛋编程”作为例子同样可以得到正确的结果。
相关文章