2 tony540102689 Tony540102689 于 2016.03.05 12:46 提问

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

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个回答

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 13:54

这是什么语言?Python? Ruby?

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

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

caozhy
caozhy   Ds   Rxr 2016.03.05 16:22

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

bealing
bealing   Rxr 2016.03.05 13:41

过滤前的数最多是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

bealing
bealing ^~^打错了,我的意思是 ,你给的那个函数的适用范围的局限性很大
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
用python求回数
今天学到filter函数,做一道练习题,求回数的,我前前后后差不多用了半个小时才把它弄出来,先是有思路了然后写出来后一直报错,又改改换换,最后其实是某个小问题导致的,每次查这种小问题时都先怀疑是不是思路有问题,其实大部分时候都不是。后来去看别人写的代码,一行就搞定了,最后的最后,我被自己蠢哭了以后还能不能愉快的写代码了? 题目:回数是指从左向右读和从右向左读都是一样的数,例如12321,
Python 利用 filter() 滤掉非回数
声明: 我写此文的目的是帮助和我一样在廖雪峰老师官网上学习Python3的同学更好的理解和学习Python的知识,所以本博文及后续文章会跟着我的学习进度来走,主要内容是廖雪峰老师官网Python资料中每节知识点后的复习题的答案和解析,有一些是我自己原创的,有一些是网上整理的大神写的简洁但对新手并不是很明了的答案,我会尽可能的给出我的解析。
利用filter()函数过滤掉非回数
Python中有几个高阶函数十分强大,map,reduce,filter,sorted.下面简单例子见证Python的简介。 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()滤掉非回数: # -*- coding: utf-8 -*- def is_palindrome(n): # 测试: output = filter(is_p
回数是指从左向右读和从右向左读都是一样的数,例如 12321 , 909 。请利用 filter() 滤掉非回数
不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!! 最近一段时间学习了廖雪峰老师学的Python学习资料,给自己的帮助很大,同时也学到的了很多,今天做了一道练习题,对于Python是小白的我来说能够靠自己的思考写出来也觉得是挺高兴的! 练习题:   回数是指从左向右读和从右向左读都是一样的数,例如 12321 , 909 。请利用 filter()
利用filter()筛选出回数
def is_palindrome(n): return str(n)==str(n)[::-1] output = filter(is_palindrome, range(1, 1000)) print(list(output))学到了这个翻转的使用,太棒了!!!
Python学习笔记——利用filter()筛选回数
回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数: def is_palindrome(n): return n == int(str(n)[::-1])
【廖雪峰python教程filter练习题】回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
题目链接: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431821084171d2e0f22e7cc24305ae03aa0214d0ef29000正确实践def is_palindrome(n): return str(n)==str(n)[::-1] outp...
利用filter()筛选出回数:
运行结果:补充介绍filter()函数Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。def is_odd(n): return n % 2 == 1 list(filter(is_odd, [...
筛选出1~1000内所有回数(Pyhton)
【注】:下述操作过程是结合多种网络方法,然后自己实践的结果。写在这里,主要目的是加深记忆,也希望能帮助后来者 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()滤掉非回数: # -*- coding: utf-8 -*- def is_palindrome(n): return str(n)==str(n)[::-
#USACO TRAINING#回文平方数
【USACO TRAINING】回文平方数 时间限制: 1 Sec  内存限制: 64 MB 题目描述 回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2表示10,11等等。 输入 第1行:一个整数B,表示进制(B用十进制表示)。 输出 若干行,每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。(注