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实现简单拆分PDF文件的方法
Jul 30 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Python读写及备份oracle数据库操作示例
May 17 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
Python调用Redis的示例代码
Nov 24 Python
python 实现控制鼠标键盘
Nov 27 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与javascript实现变量交互的示例代码
2013/07/23 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Django如何实现上传图片功能
2019/08/16 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python mysql中in参数化说明
2020/06/05 Python
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
vue路由实现登录拦截
2021/03/24 Vue.js
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
销售业务员岗位职责
2015/02/13 职场文书
Python pyecharts绘制条形图详解
2022/04/02 Python