当前位置: 首页 > news >正文

Python代码实现栈 2括号匹配算法3、通用括号匹配算法;index()方法

1、Python代码实现栈

class Stack1:
	def __init__(self):#创建s这个实例对象时就创建了一个空列表
		self.items=[]
	def push(self,item):#实例对象就相当于一个列表,所以self是实例对象本身,即一个列表
		self.items.append(item)
	def pop(self):
		return self.items.pop()
	def peek(self):
		return self.items[len(self.items)-1]
	def isEmpty(self):
		return self.items==[]
	def size(self):
		return len(self.items)
s=Stack1()
s.items  #不加括号,指的是一个属性,创建s这个实例对象时就创建了一个空列表,此时我们查看items这个属性就是一个空列表
s.push('小米')
print(s.items)#结果:['小米']
s.push('辣椒')
print(s.items)#结果:['小米', '辣椒']
s.pop()  #加括号,指调用一个函数
print(s.items)#结果:['小米']
print(s.size())#结果:1

2括号匹配算法

from pythonds import Stack
def parChecker(symbolString):
    s=Stack()  #创建一个空栈,用于临时存储“(”
    balanced=True
    index=0
    while index<len(symbolString) and balanced:
        symbol=symbolString[index] #取出串里的元素
        if symbol=="(":
            s.push(symbol) #将“("提到栈里
        else:   #如果是“)"就判断一下栈里面是否是空的
            if s.isEmpty(): #如果栈里面是空的,就表明这个”)"没有“("与它匹配,直接balanced=False结束循环
                balanced=False
            else:  #如果栈里面还有”)",则取出一个“)"
                s.pop()
        index=index+1 #进行下一轮循环
    if balanced and s.isEmpty(): #循环结束之后,判断一下栈里面是否还有多余的”("
        return True
    else:
        return False

print(parChecker("()"))#True

3、通用括号匹配算法

from pythonds import Stack
def parChecker(symbolString):
    s=Stack()  #创建一个空栈,用于临时存储“(”
    balanced=True
    index=0
    while index<len(symbolString) and balanced:
        symbol=symbolString[index] #取出串里的元素
        if symbol in "([{": #判断是否是其中之一的括号
            s.push(symbol) #将“("提到栈里
        else:   #如果是“)]}"就判断一下栈里面是否是空的
            if s.isEmpty(): #如果栈里面是空的,直接balanced=False结束循环
                balanced=False
            else:  #如果栈里面还有括号,则取出一个
                top=s.pop()#栈里面有三种括号,所以我们要把它拿出来看看
                if not matches(top,symbol):
                    balanced=False
        index=index+1 #进行下一轮循环
    if balanced and s.isEmpty(): #循环结束之后,判断一下栈里面是否还有多余的”("
        return True
    else:
        return False
def matches(open,close): #参数:左括号,右括号
    opens="([{"
    closers=")]}"
    return opens.index(open)==closers.index(close)
print(parChecker("({)}"))#False #很重要
print(parChecker("(({}))"))#True

4、十进制转换为二进制

from pythonds import Stack
def divideBy2(decNumber):
    remstack=Stack()
    while decNumber>0:
        rem=decNumber%2 #求余数
        remstack.push(rem) #把余数放在栈
        decNumber=decNumber//2 #整数除
    binString=""
    while not remstack.isEmpty():
        binString=binString+str(remstack.pop())
    return binString
print(divideBy2(42))#101010

5、十进制转换为十六进制以下任意进制

from pythonds import Stack
def baseConverter(decNumber,base):
    digits="0123456789ABCDEF"
    remstack=Stack()
    while decNumber>0:
        rem=decNumber%base #求余数
        remstack.push(rem) #把余数放在栈
        decNumber=decNumber//base #整数除
    binString=""
    while not remstack.isEmpty(): #栈的先进后出
        binString=binString+digits[remstack.pop()] #例如:如果是15,则会pop出F
    return binString
print(baseConverter(25,16))#19

补充知识:

1. 用途
如果我们需要在序列类型数据(字符串、元组、列表)中查找某个元素并输出对应的索引值,就需要使用到index()方法了。

2. index()方法
2.1 描述
index() 函数用于从序列s中找出某个值第一个出现时的索引位置。

2.2 用法
s.index(x[,i[,j]])
注释:

s——序列类型数据(字符串、元组、列表)
x—— 查找的对象。

返回值:
该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。

2.3 示例(具体用法)
————————————————
版权声明:本文为CSDN博主「WT君」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45875080/article/details/126508248
 

'''
index的具体用法
'''
 
#定义一个列表
list = [1, 8, 16, "影迷", 31, 24, "影迷", 104]
 
# 查找list中第一次出现字符串"影迷"的索引,返回值为 3
print(list.index("影迷"))
 
# 如果想要精确知道第一次出现字符串"影迷"的索引,则加上区间范围,此时返回值为 6
print(list.index("影迷", 4, 7))

相关文章:

  • 鸡兔同笼:笼子里一共有鸡和兔子35只,一共有94条退, 笼子里一共有鸡和兔子共多少只
  • Windows 下使用 Docker + MySQL 安装 Wiki.js
  • 企业成功认定国家专精特新的申报条件
  • NVM安装
  • 3GPP中URLLC标准研究进展
  • 【考研英语】作文套话(自用)
  • Microsoft Graph PowerShell v2 发布公开预览版 - 一半的大小,加速的自动化体验
  • 安卓面经(11/30)IntentService全解析
  • 基于R语言的DICE(Dynamic Integrated Model of Climate and Economy)模型
  • import语句写烦了,怎么办?
  • 互联网寒冬下的面经总结
  • 【设计模式】我终于读懂了装饰者模式。。。
  • 在线图片转文字怎么操作?
  • 机器学习模型-BUPA liver disorders-探索饮酒与肝炎关系(论文,科研,医疗信息化诊断系统用)
  • React扩展:fragment、Context
  • InnoDB详解2
  • 软件需求说明书(GB856T——88)基于协同的在线表格forture-sheet
  • 动态规划——线性dp
  • python10_IO目录处理
  • PostgreSQL实用技巧