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
本文来自:“阿里云云栖社区”,了解相关信息可以关注“阿里云云栖社区

目录
相关文章
|
20天前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
56 20
|
3月前
|
存储 监控 安全
如何在Python Web开发中确保应用的安全性?
如何在Python Web开发中确保应用的安全性?
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
3月前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
94 7
|
3月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
129 3
|
3月前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
109 3
|
5天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
41 9
|
2月前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
116 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
10天前
|
存储 SQL 大数据
Python 在企业级应用中的两大硬伤
关系数据库和SQL在企业级应用中面临诸多挑战,如复杂SQL难以移植、数据库负担重、应用间强耦合等。Python虽是替代选择,但在大数据运算和版本管理方面存在不足。SPL(esProc Structured Programming Language)作为开源语言,专门针对结构化数据计算,解决了Python的这些硬伤。它提供高效的大数据运算能力、并行处理、高性能文件存储格式(如btx、ctx),以及一致的版本管理,确保企业级应用的稳定性和高性能。此外,SPL与Java无缝集成,适合现代J2EE体系应用,简化开发并提升性能。
|
3月前
|
存储 前端开发 API
Python在移动应用开发中的应用日益广泛
Python在移动应用开发中的应用日益广泛
71 10

热门文章

最新文章