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语言中的按位运算符
Nov 26 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
smarty简单分页的实现方法
2014/10/27 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
php实现登录页面的简单实例
2019/09/29 PHP
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
python3 读取Excel表格中的数据
2018/10/16 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
详解rem 适配布局
2018/10/31 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
护理专业自我鉴定
2014/01/30 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python