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]

                

python 实现逆波兰式

复习实习数据结构:       实现逆波兰式其实搞懂里面的规则就很简单的了。 树的遍历:前序:根左右。中序:左根右。后序:左右根 直接上代码 import operator opMa...
  • bin381
  • bin381
  • 2015年12月14日 22:01
  • 613

Python3实现逆波兰表达式计算

Python3实现逆波兰表达式计算
  • JsonD
  • JsonD
  • 2017年05月01日 10:28
  • 554

CCF NOI1121 逆波兰表达式

问题链接:CCF NOI1121 逆波兰表达式。 时间限制: 1000 ms  空间限制: 262144 KB 题目描述    逆波兰表达式是一种把运算符前置的算术表...
  • tigerisland45
  • tigerisland45
  • 2017年05月08日 01:49
  • 343

Python小练习:逆波兰表达式计算

又好久没用python,做一个小练习复习一下: Evaluate the value of an arithmetic expression in Reverse Polish Notati...
  • zhangla1220
  • zhangla1220
  • 2014年09月04日 22:07
  • 1032

Python处理逆波兰表达式

Python处理逆波兰表达式的方法
  • xpresslink
  • xpresslink
  • 2017年08月16日 15:57
  • 223

Python处理逆波兰表达式

Python处理逆波兰表达式的方法
  • xpresslink
  • xpresslink
  • 2017年08月16日 15:57
  • 223

逆波兰式Python版本

逆波兰式Python版本算法描述将一个普通的中序表达式转换为逆波兰表达式的一般算法是: 首先需要分配2个栈,一个作为临时存储运算符的栈S1(含一个结束符号),一个作为输入逆波兰式的栈S2(空栈),S...
  • huliwho
  • huliwho
  • 2016年10月14日 14:15
  • 503

将表达式转换为逆波兰表达式

给定一个表达式字符串数组,返回该表达式的逆波兰表达式(即去掉括号)。 样例 对于 [3 - 4 + 5]的表达式(该表达式可表示为["3", "-", "4", "+", "5"]),返回...
  • brucehb
  • brucehb
  • 2015年10月26日 22:32
  • 1089

逆波兰表达式

题目链接:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/   Evaluate the value of an...
  • sinat_15584029
  • sinat_15584029
  • 2014年09月27日 20:07
  • 271

逆波兰表达式 - 蓝桥杯

引言 这是2013年第四届蓝桥杯全国软件大赛预赛A组(C/C++组)第6题,为代码填空题,考察点在读程序与递归。 题目描述 标题:逆波兰表达式     正常的表达式称为中缀表达式,运算符在中间,主要...
  • milkcu
  • milkcu
  • 2014年03月21日 19:53
  • 1799
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python处理逆波兰表达式
举报原因:
原因补充:

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