gpt4 book ai didi

python - 使用 Map-Reduce 时 Python 中的惰性 bool 值求值

转载 作者:行者123 更新时间:2023-11-28 21:54:35 25 4
gpt4 key购买 nike

我将使用我的示例:我想使用埃拉托色尼筛法创建一个素数列表。对于每个数字,我检查它是否是合数,如果不是,我将其附加到列表中。

  • 使用“标准”编程:

    primes = [2]
    start = time.time()
    for i in xrange(3,primeRange,2):
    isPrime = True
    for p in primes:
    if(i % p == 0):
    isPrime = False
    break;
    if(isPrime):
    primes.append(i)
    print "Using C++-style: ", time.time() - start, " seconds"
  • 使用reduce函数:

    start = time.time()
    for i in xrange(3,primeRange,2):
    if(reduce(lambda x,y:x and y,[i % p != 0 for p in primes])):
    primes.append(i)
    print "Using map-reduce: ", time.time() - start, " seconds"

primeRange = 100000 的结果:

Using map-reduce:  54.1150000095  seconds
Using C++-style: 4.62000012398 seconds

第二种情况使代码更紧凑,但条件将针对整个列表进行评估,然后缩减为 True/False。有没有办法避免这种情况?

最佳答案

您可以将 all 与生成器表达式一起使用:

if all(i % p != 0 for p in primes)

生成器表达式将懒惰地一次计算一个术语,如果 all 遇到不满足条件的值,它将提前返回。

关于python - 使用 Map-Reduce 时 Python 中的惰性 bool 值求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23973610/

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