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实现在控制台输入密码不显示的方法
Jul 02 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
Python中max函数用于二维列表的实例
Apr 03 Python
实例讲解python中的协程
Oct 08 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
Python3.5文件修改操作实例分析
May 01 Python
Python简易版图书管理系统
Aug 12 Python
python+django+rest框架配置创建方法
Aug 31 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
Python连接mysql方法及常用参数
Sep 01 Python
Python通过len函数返回对象长度
Oct 22 Python
Python创建文件夹与文件的快捷方法
Dec 08 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 开发工具
2006/12/06 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
layui的layedit富文本赋值方法
2019/09/18 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
python实现换位加密算法的示例
2018/10/14 Python
python将list转为matrix的方法
2018/12/12 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
python实现超级马里奥
2020/03/18 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
《春笋》教学反思
2014/04/15 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
公司员工手册范本
2015/05/14 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
golang 语言中错误处理机制
2021/08/30 Golang
pandas进行数据输入和输出的方法详解
2022/03/23 Python
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js