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实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Python入门之modf()方法的使用
May 15 Python
python中zip()方法应用实例分析
Apr 16 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
python实现操作文件(文件夹)
Oct 31 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
Python如何实现线程间通信
Jul 30 Python
python 高阶函数简单介绍
Feb 19 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基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
2013/10/12 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
vue.js todolist实现代码
2017/10/29 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
Python itertools.product方法代码实例
2020/03/27 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
中国央视网签名寄语
2014/01/18 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
安踏广告词改编版
2014/03/21 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers