2024-03-28 23:49:06 发布
网友
我正在尝试创建一个函数,该函数将遍历多个括号并从内到外返回每组括号的内容。 所以给定输入(9*(2*(6*6))),它将返回
(6*6) (2*(6*6)) (9*(2*(6*6)))
到目前为止,我有这个,但我不确定如何使它为多对括号工作。它只返回最里面的支架。
这将以线性时间运行。在
class stacked(): # Nodes in the stack def __init__(self,obj,next): self.obj = obj self.next = next def getObj(self): return(self.obj) def getNext(self): return(self.next) class stack(): # The stack itself def __init__(self): self.top=None def push(self,obj): self.top = stacked(obj,self.top) def pop(self): if(self.top == None): return(None) r = self.top.getObj() self.top = self.top.getNext() return(r) def Framed(StringIn,l,r): s = stack() pairs=[] for n,k in enumerate(StringIn): if(k==l): s.push([n]) if(k==r): q = s.pop() q.append(n+1) pairs.append(q) StringsOut = [] for k in pairs: StringsOut.append(StringIn[k[0]:k[1]]) return(StringsOut) s = "((1+2)*(3+4))" print(Framed(s,"(",")"))
一个非常简单的递归函数:
def parens(expr): if not expr: return parens(expr[expr.find('(', 1):expr.rfind(')', 0, len(expr)-1)+1]) print(expr) >>> parens('(9*(2*(6*6)))') (6*6) (2*(6*6)) (9*(2*(6*6))) >>> parens('((1+2)*(3+4))') (1+2)*(3+4) ((1+2)*(3+4))
您可以像这样使用pyparsing:
>>> from pyparsing import nestedExpr >>> nestedExpr('(',')').parseString('(9*(2*(6*6)))').asList() [['9*', ['2*', ['6*6']]]]
或者,对于发电机来说是个很好的应用:
这将以线性时间运行。在
一个非常简单的递归函数:
您可以像这样使用pyparsing:
或者,对于发电机来说是个很好的应用:
^{pr2}$相关问题 更多 >
编程相关推荐