解答朋友疑问,顺便分享。
一、题目
回文数是指从左向右读和从右向左读都是一样的数,例如12321,989,请利用filter()筛选出任意数字n以内的所有回文数。
二、思路
filter(回文数判断条件,完整序列)
也就是说,进一步地有两个要素要确认:
- 回文数判断条件
判断条件就是,先把这个数字变成字符型,如果是回数,字符串正着反着应该一样,所以 x==x[::-1]可以筛选出满足条件的,x[::-1]表示逆序
- 生成n以内的完整序列
三、代码
def huishu(n):
l = list(filter(lambda x: True if x == x[::-1] else False, [str(i) for i in range(n)]))
return [int(i) for i in l]
四、输出展示

五、答疑
1. 如何理解 lambda x: True if x == x[::-1] else False ?
lambda表达式允许在代码内嵌入一个函数的定义。使用lambda表达式定义了一个匿名函数,用于筛选满足回文数判断条件x == x[::-1]的字符串。
2. 如何理解 [str(i) for i in range(n)] ?
这是生成n以内的列表。注意的是,在生成的时候,把每个数字都转换成了字符串类型。
3. 为什么要将数字先转换成字符串?即[str(i) for i in range(n)] 中 str()的操作。
因为字符才可以逆序,做数位上的操作。数字作为一个数,不能再位置上去逆序排列。
比如12321,先变成字符,如果变成字符了,令 x = 12321,那么x[0] = 1, x[1] = 2,就可以拆开了。如果是数字,你没办法取出来每个数位。这就是为什么要变成字符。
4. 为什么最后又将字符串转换成 int 类型? 即 [int(i) for i in l] 中的int()操作。
因为题目是说对数字筛选,我们为了判断方便擅自将数字转换成字符串判断,所以判断完、最后输出的时候,要再转换回来,还原题目。

本文介绍了一种使用Python的filter()函数和lambda表达式筛选出特定范围内所有回文数的方法。通过将数字转换为字符串,利用字符串的逆序特性来判断是否为回文数,并最终将筛选出的字符串回文数转换回整数形式。
3140

被折叠的 条评论
为什么被折叠?



