高级函数filter的使用错误?

本文探讨了如何使用Python的filter函数从1到100中筛选出完全平方数的方法,并提供了一种通过检查平方根是否为整数的解决方案。同时也分享了一个未成功实现的尝试,最终给出了正确的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

filter函数的使用错误?

题目引用:
请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

自行解答
反向使用 1~10 的平方来计算是否与传递来的数值相等,相等则返回该值,目前还不太会使用求平方根函数 sqrt ,所以只能出此方法,当是也不是太灵活,,万一传入的列表不是 1~100 ,而是其他的范围,所以就可能会有点难办了。见下:

def fun( m ):
    for i in range(1, 10):
        if i * i == m:
            return m

x = list( range(1, 100) )
filter(fun, x)

但是调用函数查看 x 的值是发现并没有过滤掉多余的数,还是 1~100 的数,见下:

>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> 

在这里先记录一下,等以深入学习有思路了再来解决这个小问题。
我想应该是对 filter 函数的不熟悉导致的吧!
参考答案
参考答案里是直接使用的 sqrt 函数,因此比较便捷,参考代码如下:

import math
def is_sqr(x):
    r = int(math.sqrt(x))
    return r*r==x
print filter(is_sqr, range(1, 101))

并且因为函数 math.sqrt() 返回的值是浮点型,所以中间还需要转换为整型。
参考资料:
慕课网上廖雪峰的《python进阶》2-6章节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值