回数是指从左向右读和从右向左读都是一样的数,例如12321。请利用filter()滤掉非回数

def is_palindrome(n):
s = str(n)
for i in range(len(s)):
if s[i] == s[len(s)-1-i]:
return True
else:
return False

output = filter(is_palindrome, range(1, 1000))
print(list(output))

谁来解释一下原理啊,特别是

for i in range(len(s)):
if s[i] == s[len(s)-1-i]

过滤前的数最多是3位,所以实际上只判断第一位和最后一位数字是否相同,就可以判断是否是回文数,而循环只执行了1次就return了
当数字是1位数时,判端s[0] == s[1-1-0]
当数字是2位数时,判端s[0] == s[2-1-0]
当数字是3位数时,判端s[0] == s[3-1-0]

这个函数的写法太实用,如果数字是4位数甚至更多位,就会出错,下面的函数是我写的,仅供参考:

def is_palindrome(n):
s = str(n)
for i in range(len(s)/2):
if s[i] != s[len(s)-1-i]:
return False
return True

这是什么语言?Python? Ruby?

代码中的for走得太远了,只要到len(s)/2就可以了。

可以利用双向堆栈的数据结构思想来处理啊,先拿到数据,然后实现两个指针指向头尾,做比较时,头尾的字符相比较,相同则两指针各向内收敛一个字节,以此重复进行判断

for i in range(len(s)):
if s[i] == s[len(s)-1-i]
这个代码的原理就是将数字转换为字符串s依次比较第0位和最后一位(长度-1),第一位(i=1)和倒数第二位(长度-1-1),等等。
比较到len(s)/2,也就是一半为止。判断是否对称。