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正则表达式使用范例分享
Dec 04 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
Python定义函数功能与用法实例详解
Apr 08 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
python实现画出e指数函数的图像
Nov 21 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
在Python中实现函数重载的示例代码
Dec 12 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 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版
2012/04/20 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
javascript中Function类型详解
2015/04/28 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
python通过shutil实现快速文件复制的方法
2015/03/14 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
Python map及filter函数使用方法解析
2020/08/06 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
Python截图并保存的具体实例
2021/01/14 Python
全球虚拟主机商:HostGator
2017/02/06 全球购物
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
活动策划邀请函
2014/02/06 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL