首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用素数和奇数过滤器的高阶函数Python

使用素数和奇数过滤器的高阶函数Python
EN

Stack Overflow用户
提问于 2020-04-13 02:43:57
回答 2查看 32关注 0票数 0

我想做一个高阶函数,它将接受另外两个函数,然后是一组数字,并返回一组通过该函数的数字。听起来很复杂,但实际上并不复杂,下面是我的代码:

代码语言:javascript
复制
#Is_Odd
def is_thodd(n):
    if n % 3 == 1:
        return True
    else:
        return False

#Is_Prime
def is_prime(n):
    if n < 2:
        return False
    for f in range(2, int(math.sqrt(n)) + 1):
        if n % f == 0:
            return False
    return True

def filter(f,x):
    return [f(i) for i in x]

这是它应该做的:

代码语言:javascript
复制
>>> A = [2, 3, 4, 5, 6, 7, 8, 9]
>>> filter(is_thodd, A)
[4, 7]
>>> filter(is_prime, A)
[2, 3, 5, 7]
>>> filter(is_prime, [])
[]

下面是它的功能:

代码语言:javascript
复制
>>> A = [2, 3, 4, 5, 6, 7, 8, 9]
>>> filter(is_thodd, A)
[False, True, False, True, False, True, False, True]

我想不出怎么解决它,需要帮助。这不是另一个问题的重复,因为它是在修复我的代码,而不是如何解决问题。这也不是家庭作业,而只是更好地理解高阶函数的一种方法。

EN

回答 2

Stack Overflow用户

发布于 2020-04-13 03:01:06

正如@rdas所提到的,您的过滤器函数应该是:

代码语言:javascript
复制
def filter(predicate, array):
    return [item for item in array if predicate(item)]

我知道这只是为了理解高阶函数,但不要在项目中实际使用它,因为filter函数是built-in

票数 0
EN

Stack Overflow用户

发布于 2020-04-13 02:49:55

请注意,filter(function, iterable)等同于生成器表达式(item for item in iterable if function(item)) if function is not None(item for item in iterable if item) if function is None。- built-in filter function docs

由于f(i)返回一个布尔值,您的filter函数实现尝试当然会返回一个布尔值列表。相反,只有当f(i)True时,才需要返回i的值,就像内置函数一样。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61176434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档