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在图片中添加文字的两种方法
Apr 29 Python
pytorch构建网络模型的4种方法
Apr 13 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
Python中文编码知识点
Feb 18 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
Python使用configparser库读取配置文件
Feb 22 Python
Python将字典转换为XML的方法
Aug 01 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
详细介绍python类及类的用法
May 31 Python
Python Pygame实战之塔防游戏的实现
Mar 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
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
python列表的增删改查实例代码
2018/01/30 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
小学生自我鉴定
2013/10/12 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
大学老师推荐信
2014/02/25 职场文书
2014年行政工作总结
2014/11/19 职场文书
云台山导游词
2015/02/03 职场文书
放飞理想主题班会
2015/08/14 职场文书
python删除csv文件的行列
2021/04/06 Python