python:for-else和while-else应用

简介: python: for-else while-else

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

出现场景

今天的leetcode每日一题中遇到这种写法,第一次用到,感觉很神奇,省去了很多不必要的步骤。
题目:1160. 拼写单词
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写时,chars 中的每个字母都只能用一次。
返回词汇表 words 中你掌握的所有单词的长度之和。

输入:words = ["cat","bt","hat","tree"], chars = "atach"

输出:6
解释:
可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。

方法:hashmap进行字符数量比对,如果chars中的字符数量大于等于words中每个单词的字符数量,则表明该单词学会了。

class Solution:
    def countCharacters(self, words: List[str], chars: str) -> int:
        ans = 0
        hashmap = {}
        for c in chars:
            hashmap[c] = 1 if c not in hashmap else hashmap[c] + 1
        for word in words:
            hashmap2 = {}
            for w in word:
                hashmap2[w] = 1 if w not in hashmap2 else hashmap2[w] + 1
            for k, v in hashmap2.items():
                if k not in hashmap or v > hashmap[k]:
                    break
            else:  # 这里就是for-else
                ans += len(word)
        return ans

for-else

可以看到上面代码中的else是与for对齐,查阅相关资料介绍,Python是有这种写法,在Python 中,else 除了能与 if 配合外,还能和 for、while 配对使用。

官方说明:

Python循环语句(for, while)有可能带一个else分支,当一个for循环正常执行完毕时或者当一个while循环正常执行完毕(循环条件变为false)时它被触发执行,但是如果这个循环被break语句非正常中止时,则这个else分支不执行。

上面的代码正好需要这种需求,每个字符数量比较完毕后才决定是否更新ans,如果中途不满足就break,ans也不会被更新。
这里以while-else为例:

  • 无break时候
i = 0
while i < 7:
    print(i)
    i += 1
else:
    print('no interrupt')

结果:

0
1
2
3
4
5
6
no interrupt
  • 有break的时候
i = 0
while i < 7:
    print(i)
    i += 1
    if i == 3:
        break
else:
    print('no interrupt')

结果:

0
1
2

从上面两个对比中可以看到,如果break得到执行时,else操作不会得到执行。
这样的写法的好处在于可以减少状态flag来表示循环结果是如何,之前的写法是对循环结果用一个标志变量表示,最终依据标志变量来看是否执行else下的操作:

flag = 0
i = 0
while i < 7:
    print(i)
    i += 1
    if i == 3:
        flag = 1
        break
if flag:
    print("has interrupt")
else:
    print("has no interrupt")

比较繁琐,代码不够简洁。使用while-else显得更加简洁,且不用再设置一个标志变量。

参考

云栖号在线课堂,每天都有产品技术专家分享
立即加入圈子:https://c.tb.cn/F3.Z8gvnK
与专家面对面,及时了解课程最新动态!

原文发布时间:2020-03-17
本文作者:uncle_ll
本文来自:“阿里云云栖社区”,了解相关信息可以关注“阿里云云栖社区

目录
相关文章
|
8天前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
49 0
|
1月前
|
数据采集 监控 Java
Python 函数式编程的执行效率:实际应用中的权衡
Python 函数式编程的执行效率:实际应用中的权衡
199 102
|
3月前
|
机器学习/深度学习 数据采集 算法
Python AutoML框架选型攻略:7个工具性能对比与应用指南
本文系统介绍了主流Python AutoML库的技术特点与适用场景,涵盖AutoGluon、PyCaret、TPOT、Auto-sklearn、H2O AutoML及AutoKeras等工具,帮助开发者根据项目需求高效选择自动化机器学习方案。
352 1
|
2月前
|
存储 数据可视化 BI
Python可视化应用——学生成绩分布柱状图展示
本程序使用Python读取Excel中的学生成绩数据,统计各分数段人数,并通过Matplotlib库绘制柱状图展示成绩分布。同时计算最高分、最低分及平均分,实现成绩可视化分析。
159 0
|
9天前
|
机器学习/深度学习 算法 安全
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
|
5月前
|
机器学习/深度学习 数据可视化 算法
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
110 0
|
24天前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
85 0
|
28天前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
99 0
|
1月前
|
存储 程序员 数据处理
Python列表基础操作全解析:从创建到灵活应用
本文深入浅出地讲解了Python列表的各类操作,从创建、增删改查到遍历与性能优化,内容详实且贴近实战,适合初学者快速掌握这一核心数据结构。
165 0
|
1月前
|
中间件 机器人 API
Python多态实战:从基础到高阶的“魔法”应用指南
Python多态机制通过“鸭子类型”实现灵活接口,使不同对象统一调用同一方法,自动执行各自行为。它简化代码逻辑、提升扩展性,适用于数据处理、策略切换、接口适配等场景。掌握多态思维,能有效减少冗余判断,使程序更优雅、易维护。
114 0

推荐镜像

更多