鱼C论坛

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

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

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

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

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

x
  1. def isValid(self, s: str) -> bool:
  2.         stack = []
  3.         cache = {'(':')','[':']','{':'}'}
  4.         for c in s:
  5.             if c in cache:
  6.                 stack.append(c)
  7.                 continue
  8.             if len(stack) == 0 or cache[stack.pop()]!=c:
  9.                 return False
  10.         return len(stack) == 0
  11. 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, 2024-6-1 19:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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