filter()把传入的函数依次作用于每个元素,然后根据返回值是 True还 是False决定保留还是丢弃该元素。
注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
下面代码是为了实现回数的判断和输出,还是没有摆脱C语言的思路,想把数字一位一位的取出来,变成数组,然后 在使用循环比较数组。
Python自身可以实现字符串的reverse,[::-1]
可以直接进行比较返回 True 或者False
# -*- coding: utf-8 -*-
'''
def is_palindrome(n):
L = []
a = len(str(n))
b = 1
e = False
for i in range(1,a):
b = 10*b
c = n % b
L.append(c)
d = len(L)% 2
f = len(L)
for j in range(1,d):
if(L[j-1] == L(f-j)):
e = True
else:
e = False
if(e):
return n
else:
return False
'''
def is_palindrome(n):
a = str(n)
b = a[::-1]
if(a==b):
return True
else:
return False
output = list( filter(is_palindrome, range(1, 10000)))
print(output)
#输出结果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 606, 616, 626, 636, 646, 656, 666, 676, 686, 696, 707, 717, 727, 737, 747, 757, 767, 777, 787, 797, 808, 818, 828, 838, 848, 858, 868, 878, 888, 898, 909, 919, 929, 939, 949, 959, 969, 979, 989, 999, 1001, 1111, 1221, 1331, 1441, 1551, 1661, 1771, 1881, 1991, 2002, 2112, 2222, 2332, 2442, 2552, 2662, 2772, 2882, 2992, 3003, 3113, 3223, 3333, 3443, 3553, 3663, 3773, 3883, 3993, 4004, 4114, 4224, 4334, 4444, 4554, 4664, 4774, 4884, 4994, 5005, 5115, 5225, 5335, 5445, 5555, 5665, 5775, 5885, 5995, 6006, 6116, 6226, 6336, 6446, 6556, 6666, 6776, 6886, 6996, 7007, 7117, 7227, 7337, 7447, 7557, 7667, 7777, 7887, 7997, 8008, 8118, 8228, 8338, 8448, 8558, 8668, 8778, 8888, 8998, 9009, 9119, 9229, 9339, 9449, 9559, 9669, 9779, 9889, 9999]