打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python基础知识:善用列表推导式,优雅求解水仙花数

什么是水仙花数

水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,严格的定义水仙花数,是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。如371 = 3^3 + 7^3+ 1^3,则371是一个水仙花数。

Python中的求解思路

根据水仙花数的定义,可以理出下面的编程思路:

1. 新建一个空列表x,用以存储所有的水仙花数

2. For循环中,对100-999之间的任意一个整数i,逐个分解出其个位数a、十位数b和百位数c,比较abc三个数字的3次幂之和是否等于i本身,若等于,则将i添加到列表x

3. 最后输出的x即为求解的所有水仙花数

代码如下图所示:

 
 
 

  

注意,在将一个整数i分解出个位数a、十位数b和百位数c时,个位数ai除以10后得到的余数,百位数ci除以100后得到的余数,而十位数则是先将i整除10后得到整数部分,再将整数部分除以10后得到的余数数即为十位数,上面代码运行结果如下,得到所有的水仙花数为[153370371407]

 

  

使用列表推导式对代码进行优雅的改进

上面代码求解水仙花数时,实际代码行数为第9-15行共7行代码,太复杂了些,下面使用列表推导式作以下改进,代码如下:

 

  

将上面的7行代码写为第11行只有1行代码,运行结果仍然相同,即所有的水仙花数为[153370371407],很明显,代码简化了太多。

另外,关于列表推导式,其通用的书写形式如下:

[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

 

结论

列表推导式是Python语言中一项独有的特性,使用推导式可以从一个数据序根据一定的条件方便的构建另一个新的数据序列。

从现在开始,善用列表推导式,做一个合格的优雅的pythoner吧。

 

欢迎加关注,共同交流。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Python中水仙花数如何输出?
学好python拿高薪系列一(3):逻辑题目练代码
十几个python小例子,从此对python爱不释手!
【小Y学算法】⚡️每日LeetCode打卡⚡️——8.回文数
【能被4,7,8,9,11,13,25,125整除数的特征】作业帮
再谈Python的引用和变量
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服