python - 为什么配对嵌套分析的堆栈经常是空的?
问题描述
以下是我尝试检查平衡括号的代码。
def is_matched(expression):
opening = tuple('({[');
closing = tuple(')}]');
mapping = dict(zip(opening,closing));
queue = [];
for letter in expression :
if letter in opening :
queue.append(mapping[letter]);
elif letter in closing :
if (not queue) or (letter != queue.pop()) :
return False;
return not queue;
ip = input();
if is_matched(ip):
print ("Valid");
else:
print("Invalid");
我的问题是为什么queue
列表要[]
为 for 循环中输入参数中的每个字母声明?
它不应该在循环中附加每个字典映射吗?
解决方案
该代码不会“附加每个字典映射”。
它只为在 中找到的字母附加任何内容opening
。
附加的是来自closing
.
它通常会将队列返回到[]
,因为它也会执行很多pop()
,
这会删除一封信。
当pop()
来自输入的当前字母与最后附加的字母匹配时发生,
即当最近打开的对被关闭时。例如,队列[]
位于以下输入的这些位置:
vvv vvv vvv vvv vvvvv
abc(xxxx)fg[....]hi{llll}gh(--[ff]++)gggg
请注意,正如评论中也提到的那样,queue
这里的行为更像是一个堆栈,这是正确的。
推荐阅读
- reactjs - 反应渲染多个
从 Material-UI 不使用 map() - php - 使用 cURL 将 Pdf 文件上传到另一个网站
- mongodb - Mongodb 指定类型“字符串”也返回“数组”字段
- image-processing - 如何标记图像的对象
- javascript - 编写javascript来检测速度
- javascript - Jquery发送Ajax并且没有等待发送其他ajax的响应
- python - 奇数语法(继承中的海象运算符)
- sql - 如何使用 IN 运算符按两个字段进行选择
- postgresql - Postgresql 查询删除所有行
- bash - 如何使用 jq 根据唯一键值组合来自同一 JSON 对象的两个数组?