我是一名Python新手,我遇到了检查给定字符串中的简单括号“(”,“)”是否均匀匹配的练习。
我在这里看到了使用尚未遇到的stack命令的示例,因此我尝试了另一种方法。谁能告诉我我要去哪里错了?
def matched(str): ope = [] clo = [] for i in range(0,len(str)): l = str[i] if l == "(": ope = ope + ["("] else: if l == ")": clo = clo + [")"] else: return(ope, clo) if len(ope)==len(clo): return True else: return False
想法是将“(”和“)”堆积成两个单独的列表,然后比较列表的长度。我还有另一个版本,在该版本中我将ope和clo列表附加了分别包含(或)的相关i。
谢谢你的时间!
下面是执行此操作的一种非常优雅的方法。它清除for循环,并用简单的计数器变量替换列表。如果计数器降到零以下,它也会返回false,以便matched(")(")返回False。
matched(")(")
False
def matched(str): count = 0 for i in str: if i == "(": count += 1 elif i == ")": count -= 1 if count < 0: return False return count == 0