安东诺夫 发表于 2021-4-14 07:17:19

判断语句也会执行pop()吗?

def isValid(self, s: str) -> bool:
      stack = []
      cache = {'(':')','[':']','{':'}'}
      for c in s:
            if c in cache:
                stack.append(c)
                continue
            if len(stack) == 0 or cache!=c:
                return False
      return len(stack) == 0
print(isValid("{[()]}"))

执行到 if len(stack) == 0 or cache!=c: 这一行的时候进行了判断,然后stack还真就pop了列表里的元素,请问这是为什么呢?不是说只是判断吗?

wp231957 发表于 2021-4-14 07:23:58

这本身就是一个执行语句

逃兵 发表于 2021-4-14 08:22:48

pop()函数做两件事
第一件事将列表最后一个元素删除
第二件事返回那个被删除的元素
同理,在
if len(stack) == 0 or cache!=c:

由于遵守短路逻辑的原则,只要条件 len(stack) == 0不成立,pop()都会执行,一旦pop()执行成功,stack就会被删除最后一个元素
页: [1]
查看完整版本: 判断语句也会执行pop()吗?