鱼C论坛

 找回密码
 立即注册
查看: 1712|回复: 2

[已解决]判断语句也会执行pop()吗?

[复制链接]
发表于 2021-4-14 07:17:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[stack.pop()]!=c:
                return False
        return len(stack) == 0
print(isValid("{[()]}"))

执行到 if len(stack) == 0 or cache[stack.pop()]!=c: 这一行的时候进行了判断,然后stack还真就pop了列表里的元素,请问这是为什么呢?不是说只是判断吗?
最佳答案
2021-4-14 08:22:48
pop()函数做两件事
第一件事将列表最后一个元素删除
第二件事返回那个被删除的元素
同理,在
if len(stack) == 0 or cache[stack.pop()]!=c:

由于遵守短路逻辑的原则,只要条件 len(stack) == 0不成立,pop()都会执行,一旦pop()执行成功,stack就会被删除最后一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-14 07:23:58 From FishC Mobile | 显示全部楼层
这本身就是一个执行语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-14 08:22:48 | 显示全部楼层    本楼为最佳答案   
pop()函数做两件事
第一件事将列表最后一个元素删除
第二件事返回那个被删除的元素
同理,在
if len(stack) == 0 or cache[stack.pop()]!=c:

由于遵守短路逻辑的原则,只要条件 len(stack) == 0不成立,pop()都会执行,一旦pop()执行成功,stack就会被删除最后一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表