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))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值