首页 > 解决方案 > 为什么我在 Python 中的堆栈上出现错误?

问题描述

我已经用 Python 编写了下面的代码,但是每次数组“堆栈”说除了初始分配之外的堆栈时,我都会收到错误。错误是“'list' 的实例没有'push' 成员”。

澄清一下,这段代码是遍历每个字符并检查它是否是一个左括号。它将推入堆栈,左括号,我将通过 if/else 语句进行匹配,以查看它们是否匹配对。如果不匹配,则返回 false。

有谁知道为什么这段代码会在堆栈上出错?堆栈对我来说很新,它们没有意义。这是我用 Python 编写的第一段代码,所以我的语法也可能有错误。

我从堆栈上的视频中获取了代码的建议,并尝试将其翻译成 python 以查看它的工作原理。他们使用的代码只是应该发生的事情的指导。

str = '()[(]())'
arr = ['(','[']
stack = []

for char in str:
    if char in arr:
        stack.push(char)  
    else:
        if stack.empty(): 
            top = stack.pop()
            break
        if(top == '[' and char != ']') or (top == '(' and char != ')'):
            break
return stack.empty()

标签: pythonfor-loopstack

解决方案


您的功能无效。python中的List既没有push()也没有empty()方法。您应该修改代码以分别使用append()len(stack)而不是这两个。

修改后的代码如下所示 -

str1 = '()[(]())'
str2 = '()[]()'
arr = ['(','[']


def check_parentheses(str):
    stack = []
    for char in str:
        if char in arr:
            stack.append(char)  
        else:
            # If our stack is empty, there's no closing bracket to match the opening one, hence invalid
            if not stack:        # Same as len(stack) == 0
                return "Invalid"
            else:
                # if closing bracket doesn't match opening bracket, then too it's invalid
                top = stack.pop()
                if(top=='[' and char != ']' or top == '(' and char != ')' ):
                    return "Invalid"
    # If all the above checks are passed, we can be sure that parentheses are valid and balanced :)
    return "Valid"


print(check_parentheses(str1))
print(check_parentheses(str2))

输出 :

Invalid
Valid

我建议您参考 python docs - list以获取有关列表的更多信息以及您可以在它们上使用的方法。

希望这可以帮助 !


推荐阅读