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中DOM方法的动态性
Apr 11 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
python数字图像处理实现直方图与均衡化
May 04 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python关于倒排列的知识点总结
Oct 13 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
python 判断文件或文件夹是否存在
Mar 18 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
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
Python自动登录QQ的实现示例
2020/08/28 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
中专毕业生自荐信
2013/11/16 职场文书
公司员工活动策划方案
2014/08/20 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
商铺门面租房协议书
2014/10/21 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
解析Java异步之call future
2021/06/14 Java/Android
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技