Python处理逆波兰表达式

原创 2017年08月16日 15:57:18

中文名: 逆波兰表达式 

外文名: Reverse Polish Notation 
别名: 后缀表达式
逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。这个知识点在数据结构和编译原理这两门课程中都有介绍。它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算。其运算方式如下:
如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。


在Python2中的处理方法:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

RPN_str = '1 2 + 3 4 - *'

stack = []

for c in RPN_str.split():

    if c in '+-*':
        i2 = stack.pop()
        i1 = stack.pop()
        print i1,c,i2
        print eval('%s'*3 % (i1,c,i2))
        stack.append(eval('%s'*3 % (i1,c,i2)))
    else:
        stack.append(c)

print 'result', stack[0]


当然还有更Hacker一些的写法:

print reduce(lambda stack, c: stack+[eval('{2}{1}{0}'.format(stack.pop(),c,stack.pop()))] if c in '+-*' else stack+[c], RPN_str.split(),[])[0]


            
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Python3实现逆波兰表达式计算

Python3实现逆波兰表达式计算
  • JsonD
  • JsonD
  • 2017-05-01 10:28
  • 312

逆波兰表达式求值

二元运算符的表达式定义为:(操作数) + (运算符) + (操作数) ,其中操作数也可以为表达式。 在计算机中,根据运算符所在的不同位置来命名,表达式可以有如下三种不同的表示方法: 记表达式为:E...

【转载】2.2基本算法之递归和自调用函数 逆波兰表达式分析—心机深

原文请     -->点击 以下是转载内容: 申明:方法来自此博客。 一、原题 1696:逆波兰表达式 总时间限制: 1000ms 内存限制: 65536kB ...

数据结构6:使用栈计算逆波兰表达式

1、对于一个
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)