Python中使用filter函数筛选出回数
作为一个编程的初学者,最近在参照廖雪峰老师的网站资源学习Python。
在网站中 Python教程/函数式编程/高阶函数/filter 下有一道练习题是:
回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数:
由于对编程方面学识尚浅,还没有养成一些良好的编程思维,因此拿到这个题目之后我利用数学思维来进行思考,并写下了一段代码,测试结果表明实现了所需功能。具体代码如下所示:# -- coding: utf-8 --
----代码-----
# -*- coding:utf-8-*-
def is_palindrome(n):
a=1 #先将一些参数的初值进行定义
m=n
l=[]
if n/10<1: # 若输入值n<10,则直接输出
l.insert(-a,n)
a=a+1
else: #若输入值n>=10,则先将n的各个数位上的数值分开存储到所创建的list中
while n/10>=1: #筛选n的十位及以上数位上的数值
l.insert(-a,n%10)
a=a+1
n=n//10
l.insert(-a,n) #剩下的个位上的数值直接添加到list中
for b in range(0,a//2):#对所生成的list中的相应元素值进行比较,判断是否处于对称位置的元素相等
if l[b]==l[-b-1]:
return m #将符合判断条件的结果返回
----运行结果------
然而,在看到网上有些人所写的代码之后,惊讶于他们代码的简洁性!例如:
def is_palindrome(n):
l=list(str(n))
return l==l[::-1]
利用字符串的特性,与取反操作,只需三行就可以实现所需功能!