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程序中的运用
Mar 02 Python
Python爬取京东的商品分类与链接
Aug 26 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
python 阶乘累加和的实例
Feb 01 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
办公自动化专业大学生职业规划书
2014/03/06 职场文书
新闻编辑求职信
2014/04/09 职场文书
培训协议书范本
2014/04/22 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
工程承包协议书
2014/10/20 职场文书
python实现图片批量压缩
2021/04/24 Python
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android