我成功编写了一些代码,如果列表中的所有项目均为质数,则该代码返回true。
我认为这是reduce的不错选择-到目前为止,我只将reducelambda结合使用-是否有可能避免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/

10-12 18:41