gpt4 book ai didi

python - 无需 lambda 即可减少

转载 作者:行者123 更新时间:2023-11-30 22:36:39 25 4
gpt4 key购买 nike

我成功编写了一些代码,如果列表中的所有项目都是素数,则该代码返回 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 将 bool 值列表有效地减少为单个 bool 值,有一个运算符andoperator 模块中定义,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com