您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python如何使用filter()滤掉非回数
## 什么是回数?
回数(Palindrome Number)是指正读和反读都相同的数字。例如:
- 121(正读121,反读121)
- 1331(正读1331,反读1331)
- 9(单个数字也被视为回数)
非回数则是不满足这一特性的数字,如123、-121等。
## filter()函数简介
Python内置的`filter()`函数用于过滤序列,其语法为:
```python
filter(function, iterable)
function
:判断函数,返回True/Falseiterable
:可迭代对象def is_palindrome(num):
# 处理负数和非整数情况
if not isinstance(num, int) or num < 0:
return False
# 单个数字直接返回True
if num < 10:
return True
# 转换为字符串比较
str_num = str(num)
return str_num == str_num[::-1]
numbers = [121, 123, 1331, 9, -121, 0, 12321]
palindromes = list(filter(is_palindrome, numbers))
print(palindromes) # 输出: [121, 1331, 9, 0, 12321]
def is_palindrome(num):
if not isinstance(num, int) or num < 0:
return False
if num < 10:
return True
str_num = str(num)
return str_num == str_num[::-1]
numbers = [121, 123, 1331, 9, -121, 0, 12321, 3.14, "abc"]
palindromes = list(filter(is_palindrome, numbers))
print("原始数字:", numbers)
print("回数结果:", palindromes)
输出结果:
原始数字: [121, 123, 1331, 9, -121, 0, 12321, 3.14, 'abc']
回数结果: [121, 1331, 9, 0, 12321]
def is_palindrome_math(num):
if num < 0:
return False
original = num
reversed_num = 0
while num > 0:
reversed_num = reversed_num * 10 + num % 10
num = num // 10
return original == reversed_num
palindromes = (num for num in numbers if is_palindrome(num))
print(list(filter(is_palindrome, range(100, 1000))))
数据清洗:从混合数据中提取有效回数
算法竞赛:作为其他算法的预处理步骤
Q: 为什么负数不被视为回数? A: 因为负号会导致数字不对称,例如-121反读是121-
Q: 浮点数可以判断吗? A: 本文示例中已排除,但可以通过转换为字符串后处理小数点来实现
Q: filter()和列表推导式哪个更好? A: 两者功能相似,filter()更函数式,列表推导式更直观
通过filter()
函数配合自定义的回数判断函数,我们可以高效地从数字列表中筛选出回数。这种方法具有:
- 代码简洁明了
- 可扩展性强(可轻松修改判断条件)
- 函数式编程风格
掌握这一技巧后,可以灵活应用于各种需要数据过滤的场景。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。