Python处理逆波兰表达式

原创 2017年08月16日 15:57:18

中文名: 逆波兰表达式 

外文名: 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]


当然还有更Hacker一些的写法:

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]

                    

Python3实现逆波兰表达式计算

Python3实现逆波兰表达式计算
  • JsonD
  • JsonD
  • 2017年05月01日 10:28
  • 422

逆波兰表达式(c++和python实现)

#include #include #include using namespace std; string getPolStr(string givenStr) { #define fun(...

逆波兰表达式 c语言实现

  • 2010年04月16日 17:54
  • 557B
  • 下载

堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现

堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现 write by 九天雁翎(JTianLing) -- blog.c...

逆波兰表达式实现

  • 2017年12月05日 18:43
  • 35KB
  • 下载

栈与逆波兰表达式(VC++源程序)

  • 2009年12月04日 13:46
  • 507KB
  • 下载

如何利用堆栈及逆波兰表达式进行数学四则运算(C语言版)

本文演示如何利用自定义堆栈(可实现通用性)和逆波兰表达式(后缀表达式)来进行数学四则运算。 阅读须知:了解堆栈定义过程、了解中缀表达式、了解后缀表达式(逆波兰表达式)。不清楚的同学百度一下,用10分钟...

求解逆波兰表达式 c语言

  • 2009年04月04日 17:20
  • 483B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python处理逆波兰表达式
举报原因:
原因补充:

(最多只允许输入30个字)