is_prime 一班 python

is_prime one liner in python

我尝试编写一个函数,如果给定参数是质数,则 returns 'True' 否则 'False' 。从某种意义上说,我实现了我的目标,但我只是想知道一个更好、更 pythonic 的方法来做到这一点,这是我想出的:

def prime_one_liner(n):
    return True if len([i for i in range(2,n) if n % i == 0]) == 0 else False

“实现您的 'Goal'”

如果这是你的目标,你可以使用 any 来缩短它:

def prime(n): return not any(n % i == 0 for i in range(2,n))

虽然,“pythonic”不是我要描述的方式。它更像是“难以阅读”。然而,它可能比你的版本更 pythonic。

更好的方法:

一个更具可读性的版本是:

def prime(n): 
    for i in range(2, n): #for every value between 1 and n
        if n%i == 0: #check if i divides n
            return False #if this is true, n is not prime
    return True

正确函数:

但是您需要考虑小于 2 的值,因此您还需要像这样编辑代码:

def prime(n): return not any(n % i == 0 for i in range(2,n)) if n > 1 else False

And/or:

def prime(n): 
    for i in range(2, n): #for every value between 1 and n
        if n%i == 0: #check if i divides n
            return False #if this is true, n is not prime
    return True if n > 1 else False #values less than 2 are not prime.

一般信息:

您的代码不适用于 n 的所有整数值,请考虑 n=1(请参阅上面修复此问题的修改示例),但无论如何,可以使其更短如果那是您的目标(如上所示),但仅仅因为它很短并不意味着它是“pythonic”。目前您的代码很难阅读。所以也许扩展代码会更好(类似于上面的代码扩展)。

我认为这是最“pythonic”的方式:

def prime_one_liner(n): return all((n%i)>0 for i in range(2, int(n**.5)+1)) if n>1 else False

我的想法是这样的:

x = lambda n: False if False in map(lambda i: False if n % i == 0 else True, range(2, n)) else True

因为这是一个由一行而不是两行组成的单行本

但可能有很多 good/better 方法可以做到这一点,但它在某种程度上是 pythonic