复制代码
from itertools import product

def palindromeNum(n):
   return [n*'%s'%tuple(list(i)+list(i[n*(n-1)/2%(n-1)-1::-1])) for i in product(*([range(1,10)]+[range(0,10)]*((n+1)/2-1)))]
#n>1

print map(palindromeNum, [3,4,5]
复制代码

如果需要产生回文数,数据量不大时,往往会判断是否对称或比较反转后是否还是自身,然后过滤,不过指定的范围较大时,效率就不高了

n位的回文数是其实是由前Ceiling(n/2)位决定的,以上代码采用这种构造方法生成,经测试生成10位以内的回文数不到1 s (不输出)