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的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
利用Python获取操作系统信息实例
Sep 02 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
Sanic框架安装与简单入门示例
Jul 16 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
基于FME使用Python过程图解
May 13 Python
python使用建议与技巧分享(一)
Aug 17 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
Python: glob匹配文件的操作
Dec 11 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
python 默认参数问题的陷阱
2016/02/29 Python
python实现推箱子游戏
2020/03/25 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
Django model class Meta原理解析
2020/11/14 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
手机促销活动方案
2014/02/05 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
结婚十年感言
2015/07/31 职场文书