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
我尝试编写一个函数,如果给定参数是质数,则 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