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实现股市信息下载的方法
Jun 15 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Python异常处理操作实例详解
May 10 Python
Python操作mongodb的9个步骤
Jun 04 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
django序列化时使用外键的真实值操作
Jul 15 Python
Python 随机按键模拟2小时
Dec 30 Python
Python页面加载的等待方式总结
Feb 28 Python
Python实现科学占卜 让视频自动打码
Apr 09 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 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接口数据加密、解密、验证签名
2015/03/12 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
使用javascipt---实现二分查找法
2013/04/10 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
详细介绍Python中的偏函数
2015/04/27 Python
Python实现excel转sqlite的方法
2017/07/17 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
迟到检讨书800字
2014/01/13 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
css3 选择器
2022/05/11 HTML / CSS