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 相关文章推荐
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
python概率计算器实例分析
Mar 25 Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
python 调用钉钉机器人的方法
Feb 20 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
python logging模块的使用
Sep 07 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
javascript控制台详解
2015/06/25 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
Flask框架信号用法实例分析
2018/07/24 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python中下标和切片的使用方法解析
2019/08/27 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
python简单实现插入排序实例代码
2020/12/16 Python
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
简短大学毕业感言
2014/01/18 职场文书
学校七一活动方案
2014/01/19 职场文书
应急管理培训方案
2014/06/12 职场文书
离婚协议书标准格式
2014/10/04 职场文书
实习协议书
2015/01/27 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
征求意见函
2015/06/05 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
修改并编译golang源码的操作步骤
2021/07/25 Golang