高级函数filter的使用错误?

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章节

猜你喜欢

转载自blog.csdn.net/Huffie/article/details/81369317