首页 > 编程语言 >python初步了解栈

python初步了解栈

时间:2022-12-08 10:57:54浏览次数:38  
标签:python pop 初步 了解 表达式 l1 print stack append

python初步了解栈

栈是一种后入先出的数据结构。

python用列表实现堆栈非常容易,使用append函数,即可实现堆栈,pop()函数即可实现从栈顶取出元素。

stack = [3, 4, 5]
stack.append(6)
stack.append(7)
print(stack)
#[3, 4, 5, 6, 7]
print(stack.pop())
#7
print(stack)
#[3, 4, 5, 6]
print(stack.pop())
#6
print(stack.pop())
#5
print(stack)
#[3, 4]#####队列

使用栈来完成中缀表达式转后缀表达式的问题

如:将3(5–2)+7转换为352-7+

完成这个问题有以下几个要点

对于输入的算式,先对它的每个元素进行判断,建立一个存储运符的栈,和最终表达式。

(1)如果元素为数字则直接存入最终表达式中,如果不是,则再进行判断。

(2)当遇到左括号存入栈。

(3)当遇到右括号,不断从栈中取出符号,存入最终表达式,直到取到左括号。

(4)遇到运算符,先将它与栈顶的符号进行优先级判断,如果运算符的优先级大等于栈顶的符号,则不断取出栈顶,存入最终表达式中。

(优先级乘除>加减>左括号)

最后从栈顶不断取出剩余的运算符,存入最终表达式

def pd(a):
    if a in '*/':
        return 3
    elif a in '+-':
        return 2
    else:
        return 1
l = list(input("请输入表达式:"))
l1=[]
r=[]
for i in l:
    if i in "+-*/":
        if l1:
            while (pd(l1[-1]) >= pd(i)):
                r.append(l1.pop())
                if len(l1) == 0:
                    break
            l1.append(i)
        else:
            l1.append(i)
    elif i == '(':
        l1.append(i)
    elif i == ')':
        t = l1.pop()
        while t != '(':
            r.append(t)
            t = l1.pop()
    else:
        r.append(i)
while l1:
    for i in l1:
        r.append(l1.pop())
for i in r:
    print(i,end='')

标签:python,pop,初步,了解,表达式,l1,print,stack,append
From: https://www.cnblogs.com/102204216zxf/p/16965460.html

相关文章

  • python初步了解队列
    python初步了解队列队列是一种先入先出的数据结构单纯用列表来实现队列运用pop()函数,进行出队效率很低,因为在列表开头删除元素需要将其他元素往前移动一位.所以一般用......
  • python浅拷贝和深拷贝
    python浅拷贝和深拷贝python中对对象直接赋值其实只是将其换了一个名字,想要对对象进行真正的复制要通过别的方法。浅拷贝浅拷贝利用copy()函数就可以实现,它会产生新的对......
  • java-net-php-python-s2s酒店管理系统计算机毕业设计程序
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Python中glob类的使用
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Python3 多线程并发处理的返回值收集
    库函数threading背景去查询python3多线程,可以找到一大堆关于threading库的博客教程,但是多数是几个线程执行同一个函数(他们博客里各个线程传入的函数参数不同),且没有......
  • python中socke套接字的应用
    socket:问题一:什么是socketsocket(简称套接字)是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服......
  • websocket vs stomp你了解吗?
    背景在一个项目中,有个消息中心的功能。后端同学说这次可以不用websocket,而用stomp吗?于是看了下stomp,发现stomp对后端好处更多,可是对前端来说差不多。对比1、websocket......
  • 3.4.Linux-文本过滤与处理-diff3指令:比较3个文件的不同(了解)
    1.diff3 diff3命令用于比较3个文件,将3个文件的不同的地方显示到标准输出。2.语法diff3(选项)(参数)3.选项-a:把所有的文件都当做文本文件按照行为单位进行比较,即给......
  • Centos 7 + python3 + paramiko + netmiko 安装
    转载自 (31条消息)Centos7下安装Python3并通过Pip安装Paramiko与Netmiko_筐瓢大师小吕的博客-CSDN博客             ......
  • 关于解决pip安装python第三方库超时的问题
    直接换源下载1.设置超时时间,安装txt文件内安装包pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simple--default-timeout=1000-rpackages.txt2.指定源安装,推......