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基础之条件与循环控制实例解析
Aug 13 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
flask框架url与重定向操作实例详解
Jan 25 Python
详解Python中的路径问题
Sep 02 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 Python
python全面解析接口返回数据
Feb 12 Python
python使用shell脚本创建kafka连接器
Apr 29 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中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
PHP中soap的用法实例
2014/10/24 PHP
PHP网络操作函数汇总
2015/05/18 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
javascript每日必学之继承
2016/02/23 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
python实现socket端口重定向示例
2014/02/10 Python
Python卸载模块的方法汇总
2016/06/07 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
python如何创建TCP服务端和客户端
2018/08/26 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
求职简历中的自我评价分享
2013/12/08 职场文书
地球一小时活动总结
2015/02/27 职场文书
销售辞职信范文
2015/03/02 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
python 爬取吉首大学网站成绩单
2021/06/02 Python