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 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
Python实现端口复用实例代码
Jul 03 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
对Keras自带Loss Function的深入研究
May 25 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 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
PHP 和 COM
2006/10/09 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
复选框全选与全不选操作实现思路
2013/08/18 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
Python饼状图的绘制实例
2019/01/15 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
在python中使用nohup命令说明
2020/04/16 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
幼儿园实习生辞职信
2014/01/20 职场文书
教师学习培训邀请函
2014/02/04 职场文书
督导岗位职责范本
2015/04/10 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书