logi中的pop()空deque()

2024-03-28 11:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够验证圆括号,这样它们就可以包含并忽略任何类型的字符。只要有效地使用了带括号的字符串的enclosure,那么Trueelse`False。在

我对python还是个新手,所以我不知道如何正确地为这个特定条件创建if语句。我试图创建一个fi语句,这样当我.pop()一个空的deque()时,我将能够return False,而不是接收错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: pop from an empty deque

也许还有其他更好的方法来解决这个问题。如果是这样的话,我很高兴看到别人会怎么解决这个问题

例如:

^{pr2}$

我的代码:

# any letter is ignored
# jsut make sure that the parenthesis are equal

from collections import *

def str_valid(stringy):
    param_stack = deque()
    for n in stringy:
        if n ==')':
            param_stack.pop()
        if n == '(':
            param_stack.append('(')
    if param_stack == []:
        return True
    else:
        return False 

a = 'sdf(sadf(sdf)sdf)sdfsd0sdf)sdf(sdf0)' # false 
b = 'dsf))))(((((dsfsdf' # false
c = '()()()()'  # true
d = '((((asd(asd)asd)()()asd))'   # true

print str_valid(a)

print str_valid(b)

print str_valid(c)

print str_valid(d)

Tags: infromfalsereturnifparamstack语句
3条回答

需要注意的是:首先,您使用的deque的方法只有append()和{}。所以使用普通的Python列表更自然。除非你需要把东西放上去,或者把东西取下来,“左端”,否则deque没有比单子更有效的了。在

其次,你已经知道如何测试一个空的deque!你在这里做的:

if param_stack == []:

这有点奇怪,因为你在比较一个deque和一个列表,但是它是有效的。再加上一点经验,你可以这样写:

^{pr2}$

如果经验丰富,您可以使用:

if not param_stack:

(空容器在truth-y上下文中通常表现为False)。在

但是不管你怎么写,与其引入try/except块,它更容易、更清晰地执行以下操作:

    if n ==')':
        if param_stack:  # i.e., if it's not empty
            param_stack.pop()
        else:   # it's empty
            return False

明白了吗?在

如果只希望If语句在pop()之前检查deque是否为空,则可以使用

if n ==')':
    if param_stack:
        param_stack.pop()
    else:
        return false
...

如果param_stack将隐式地将其转换为布尔值,如果包含某些元素,则返回true,否则返回false。在

如果您只想弹出一个没有问题的空deque:

from collections import deque

d = deque()
try:
    d.pop()
except IndexError:
    pass  # do whatever you want in the case that there is nothing there
    return False # is this what you want?
else:
    pass  # do whatever you want in the case that there is something there

只是一个警告,以防您不知道:请将try/except/else/finally中的代码量保持尽可能简短和集中。很容易在错误处理程序中突然出现错误并导致意外。在

如果这不是您需要的,请澄清您的代码中有哪些不起作用。在

相关问题 更多 >