什么是水仙花数
水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,严格的定义水仙花数,是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。如371 = 3^3 + 7^3+ 1^3,则371是一个水仙花数。
Python中的求解思路
根据水仙花数的定义,可以理出下面的编程思路:
1. 新建一个空列表x,用以存储所有的水仙花数
2. 在For循环中,对100-999之间的任意一个整数i,逐个分解出其个位数a、十位数b和百位数c,比较a、b、c三个数字的3次幂之和是否等于i本身,若等于,则将i添加到列表x中
3. 最后输出的x即为求解的所有水仙花数
代码如下图所示:
注意,在将一个整数i分解出个位数a、十位数b和百位数c时,个位数a是i除以10后得到的余数,百位数c是i除以100后得到的余数,而十位数则是先将i整除10后得到整数部分,再将整数部分除以10后得到的余数数即为十位数,上面代码运行结果如下,得到所有的水仙花数为[153,370,371,407]:
使用列表推导式对代码进行优雅的改进
上面代码求解水仙花数时,实际代码行数为第9-15行共7行代码,太复杂了些,下面使用列表推导式作以下改进,代码如下:
将上面的7行代码写为第11行只有1行代码,运行结果仍然相同,即所有的水仙花数为[153,370,371,407],很明显,代码简化了太多。
另外,关于列表推导式,其通用的书写形式如下:
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
结论
列表推导式是Python语言中一项独有的特性,使用推导式可以从一个数据序列根据一定的条件方便的构建出另一个新的数据序列。
从现在开始,善用列表推导式,做一个合格的优雅的pythoner吧。
欢迎加关注,共同交流。
联系客服