Python实现处理逆波兰表达式示例


Posted in Python onJuly 30, 2018

本文实例讲述了Python实现处理逆波兰表达式。分享给大家供大家参考,具体如下:

中文名: 逆波兰表达式

外文名: 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]

运算结果:

1 + 2
3
3 - 4
-1
3 * -1
-3
result -3

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

RPN_str = '1 2 + 3 4 - *'

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]

运算结果:

-3

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中实现结构相似的函数调用方法
Mar 10 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
Python字典的核心底层原理讲解
Jan 24 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
python函数修饰符@的使用方法解析
Sep 02 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
python标识符命名规范原理解析
Jan 10 Python
Django如何批量创建Model
Sep 01 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
如何利用python创作字符画
Jun 25 Python
python实现自动网页截图并裁剪图片
Jul 30 #Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 #Python
对PyTorch torch.stack的实例讲解
Jul 30 #Python
Python 中字符串拼接的多种方法
Jul 30 #Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 #Python
TensorFlow Session使用的两种方法小结
Jul 30 #Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 #Python
You might like
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
python 连接sqlite及简单操作
2017/06/30 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
python实现LRU热点缓存及原理
2019/10/29 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
社区庆中秋节活动方案
2014/02/07 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书