我成功编写了一些代码,如果列表中的所有项目均为质数,则该代码返回true。
我认为这是reduce
的不错选择-到目前为止,我只将reduce
与lambda
结合使用-是否有可能避免lambda
并使用直接函数?
def is_prime(list):
np = "Prime"
for n in list:
if n < 2:
np = "NonPrime"
print np
# return np
else:
for i in range(3, n): #int(math.sqrt(n))
if n % i == 0:
np ="NonPrime"
print np
return np
最佳答案
您可能需要重构此代码,以检查数字是否为质数,然后使用该代码来测试数字列表是否为all()
质数。 all()
比reduce()
更好,因为它会短路。
注意:您不应使用list
作为变量或参数,因为它会隐藏python内置类型。
def is_prime(n):
if n < 2:
return False
for i in range(3, n): #int(math.sqrt(n))
if n % i == 0:
return False
return True
def all_primes(iterable):
return all(is_prime(n) for n in iterable)
>>> all_primes([2,3,5,7])
True
>>> all_primes([2,3,5,8])
False
如果您确实想将其实现为
reduce()
,则可以使用and
有效地将布尔列表简化为单个布尔,在and
模块operator
中定义了operator.and_
的运算符:from functools import reduce # Py3
import operator as op
def all_primes(iterable):
return reduce(op.and_, (is_prime(n) for n in iterable))
关于python - 减少不带lambda,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44092214/