首页 > 解决方案 > is_prime 函数使用过滤器抽象函数

问题描述

我正在尝试使用“过滤”抽象函数来解决 is_prime 问题。我认为这是合乎逻辑的作品,但结果总是错误的。当我添加'print(lon)'时,试图找出问题所在。它输入了一些我不明白的东西。

我尝试了递归方式,它有效。

def is_prime(n):
    if n == 2:
        return True
    lon = filter (lambda x: n % x == 0, list(range (2, n)))
    if lon == []:
        return True
    else:
        return False

结果总是假的。

通过添加

print(lon)

跑步

is_prime(7)

结果是

<filter object at 0x039456D0>
False

标签: pythongeneratorprimes

解决方案


过滤器对象永远不会 == 到列表,所以你总是会得到错误的。相反,请检查过滤器是否为空。

def is_prime(n):
    if n == 2:
        return True
    lon = filter (lambda x: n % x == 0, list(range (2, n)))
    try:
        min(lon)
    except ValueError:
        return True
    return False

编辑:更清洁的方式

def is_prime(n):
    if n == 2:
        return True
    lon = filter (lambda x: n % x == 0, list(range (2, n)))
    if not any(lon):
        return True
    else:
        return False

推荐阅读