高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)

这篇具有很好参考价值的文章主要介绍了高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python版本:3.10

在列表中,append和pop方法有一个特殊的用途。可以在列表上使用这两个方法让列表变成一个堆栈使用。

高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)

这就是一个栈,它是先进后出,类似单门轿厢电梯一样的设计,出入口共用

堆栈最有用的应用之一就是做逆波兰式表达法(RPN)的解释器。RPN使用后缀表达式,至于人类怎么将自己常用的数学式转换为RPN表达式,可以搜本账号先前发布的文章《odoo14 | odoo中domain的复杂写法》中前半部分的基础教学来学习转换过程。

使用RPN的好处就是,可以用明确的方式将这两个操作数和运算符放在一起而不需要使用括号,例如:

10 5 * 7 3 + /

这个表达式等价于下面的常用表达式(中缀表达式),结果为 5.0:

(10 * 5) / (7+3)

下面是一个实现RPN逻辑的python代码

the_stack = []


def push(v):
    the_stack.append(v)


def pop():
    return the_stack.pop()


def main():
    s = input('enter rpn string:')
    a_list = s.split()
    for item in a_list:
        if item in '+-*/':
            op2 = pop()
            op1 = pop()
            if item == '+':
                push(op1 + op2)
            elif item == '-':
                push(op1 - op2)
            elif item == '*':
                push(op1 * op2)
            else:
                push(op1 / op2)
        else:
            push(float(item))
    print(pop())


main()

# 输入:2 3 +
# 要有空格

>>> enter rpn string: 2 3 * 4 5 + *
54.0

只要识别到运算符就将堆栈中的倒一和倒二取出并进行运算后再将结果放回,直到运行到最后一个运算符,将堆栈中的最后两个结果运算后将最终结果放回,执行到最后再将堆栈中的唯一存在的结果取出输出到终端。文章来源地址https://www.toymoban.com/news/detail-442822.html

到了这里,关于高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python使用列表模拟10个评委打分,去除最高、低分后,求平均分

    1、 打分实现 定义一个空列表接收评委的打分  : scores = []   在for循环中接收打分,并对分数进行判断: scores.append(score)#使用append函数将打分存入列表中 判断高低分,然后使用remove函数去掉高低分 2、猜拳实现: 3、1-100偶数累加实现: 法一: 法二:   4、退出循环:bre

    2024年02月11日
    浏览(57)
  • Python-爬虫、自动化(selenium,动态网页翻页,模拟搜索,下拉列表选择、selenium行为链)

    selenium是一个Web自动化测试工具,可以直接运行在浏览器上·支持所有主流的浏览器.可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,基础页面截图等。 使用pip install selenium命令下载selenium模块。 运行下列代码: 说明没有下载对应浏览器的驱动,这里使用谷歌

    2024年02月01日
    浏览(72)
  • Python字典应用:学生成绩列表输出

    假设有一个存放学生学号和语数英三门功课成绩的列表studs如下: studs= [{‘sid’:‘103’, ‘Chinese’: 90, ‘Math’:95, ‘English’:92},{‘sid’:‘101’, ‘Chinese’: 80, ‘Math’:85, ‘English’:82}, {‘sid’:‘102’, ‘Chinese’: 70, ‘Math’:75, ‘English’:72}]。编写程序,将列表studs的数据内

    2024年02月08日
    浏览(44)
  • 计算机组成原理知识——CPU结构组成和功能、堆栈、RISC、

    2023.9.6 计组知识开始学习 中央处理单元 :简称为CPU或处理器,功能是控制计算机的操作和处理数据 控制器 :控制计算机的操作,例如读取指令、分析指令、时序、总线的控制等 运算器 :完成数据处理功能 寄存器 :临时存储指令、地址、数据、计算结果等 中断 3个:取指

    2024年02月09日
    浏览(41)
  • Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解

    前面的Redis从入门到精通的基础篇和进阶篇都是在使用层面和概念层面,本章节,我们了解一下redis的底层数据结构,上几个章节,我们讲了SDS,字典 。本章节我们聊一下ZipList。 压缩列表(ZipList)就是redis为了节约内存而设计开发的数据结构,并且作为列表键和哈希键的底层

    2024年02月08日
    浏览(91)
  • 【C++高阶(三)】AVL树深度剖析&模拟实现

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C++   🔝🔝 如果你不知道什么是二叉搜索树 请一定先阅读这篇文章: 二叉搜索树深度剖析 为了解决二叉搜索树不稳定的问题 于是乎有人提出了AVL树结

    2024年02月05日
    浏览(45)
  • Python使用Selenium模拟浏览器自动操作功能

    概述 在进行网站爬取数据的时候,会发现很多网站都进行了反爬虫的处理,如JS加密,Ajax加密,反Debug等方法,通过请求获取数据和页面展示的内容完全不同,这时候就用到Selenium技术,来模拟浏览器的操作,然后获取数据。本文以一个简单的小例子,简述Python搭配Tkinter和

    2024年01月17日
    浏览(71)
  • 【数据结构】12 堆栈应用:表达式求值

    有一个常量表达式的中缀表达式为:5 + 6 / 2 - 3 * 4,其后缀形式表示为: 5 6 2 / + 3 4 × -。后缀表达式的特点是运算符位于两个预算数之后。其前缀表达式为: - + 5 / 6 2 × 3 4。 后缀表达式相比于中缀表达式的求值要容易很多。 从左到右扫描该表达式: (1)遇见运算数5 6 2时不

    2024年02月20日
    浏览(59)
  • 4.8 x64dbg 学会扫描应用堆栈

    堆栈是计算机中的两种重要数据结构 堆(Heap)和栈(Stack)它们在计算机程序中起着关键作用,在内存中堆区(用于动态内存分配)和栈区(用于存储函数调用、局部变量等临时数据),进程在运行时会使用堆栈进行参数传递,这些参数包括局部变量,临时空间以及函数切换

    2024年02月13日
    浏览(32)
  • Python列表操作指南:索引、切片、遍历与综合应用

    列表(List)是Python中最常用的数据结构之一,它可以存储多个元素,并且支持对元素的索引和切片操作。本文将介绍列表的基本操作和常用方法。 通过方括号 [] 来创建一个列表,可以是空列表或包含元素的列表。例如: 列表中的元素按照插入顺序存储,并且每个元素都有一

    2024年02月09日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包