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编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
浅析Python装饰器以及装饰器模式
May 28 Python
python实现俄罗斯方块
Jun 26 Python
python使用response.read()接收json数据的实例
Dec 19 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
python实现梯度下降算法的实例详解
Aug 17 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python开发的HTTP库requests详解
2017/08/29 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
企业总经理岗位职责
2014/02/13 职场文书
工程管理英文求职信
2014/03/18 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
冬季安全检查方案
2014/05/23 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
技术支持岗位职责
2015/02/13 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
老人院义工活动感想
2015/08/07 职场文书
暑假生活随笔
2015/08/15 职场文书