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