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使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
Python用csv写入文件_消除空余行的方法
Jul 06 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
python与字符编码问题
May 24 Python
python实现学生管理系统开发
Jul 24 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
python某漫画app逆向
Mar 31 Python
Python 解决空列表.append() 输出为None的问题
May 23 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 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
谈谈PHP语法(3)
2006/10/09 PHP
推荐一篇入门级的Class文章
2007/03/19 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
Python之list对应元素求和的方法
2018/06/28 Python
python中的for循环
2018/09/28 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
Python如何定义接口和抽象类
2020/07/28 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
行政管理人员精品工作推荐信
2013/11/04 职场文书
车祸赔偿收入证明
2014/01/09 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
道歉短信大全
2015/05/12 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
pytorch Dropout过拟合的操作
2021/05/27 Python