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 多线程中的守护线程与join的用法详解
Feb 18 Python
python实现微信定时每天和女友发送消息
Apr 29 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
零基础学python应该从哪里入手
Aug 11 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
详解Python 中的 defaultdict 数据类型
Feb 22 Python
python文件目录操作之os模块
May 08 Python
Python连续赋值需要注意的一些问题
Jun 03 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中文件缓存转内存缓存的方法
2011/12/06 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
PHP文件操作实例总结
2016/09/27 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
Python之修改图片像素值的方法
2019/07/03 Python
Pytorch之parameters的使用
2019/12/31 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
外语专业毕业生自荐信
2014/04/14 职场文书
平安工地汇报材料
2014/08/19 职场文书
2015年妇女工作总结
2015/05/14 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python