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抓取京东图书评论数据
Aug 31 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
取numpy数组的某几行某几列方法
Apr 03 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
Python函数中不定长参数的写法
Feb 13 Python
Django中Middleware中的函数详解
Jul 18 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
利用Python优雅的登录校园网
Oct 21 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
详解python的内存分配机制
May 10 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
简单实现jQuery弹窗效果
2017/10/30 jQuery
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
Python字符遍历的艺术
2008/09/06 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
详解Python绘图Turtle库
2019/10/12 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
打架检讨书400字
2014/01/17 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
作风建设剖析材料
2014/10/06 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
对讲机的最大通讯距离是多少
2022/02/18 无线电