使用Map-Reduce时Python中的惰性布尔评估

姆波波

我将使用我的示例:我想使用Eratosthenes筛子创建一个素数列表。对于每个数字,我都会检查它是否为复合数字,如果不是,则将其附加到列表中。

  • 使用“标准”编程:

    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如果它遇到不满足条件的值,则将提早返回。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用filter,reduce,add,map从多个词典中获取和评估数据

来自分类Dev

使用布尔AND时明确评估两个条件

来自分类Dev

在python中对map使用递归

来自分类Dev

使用map reduce实施小组

来自分类Dev

使用UnderscoreJS进行Map Reduce

来自分类Dev

使用reduce fnt代替map

来自分类Dev

使用UnderscoreJS进行Map Reduce

来自分类Dev

使用map / reduce计算总数

来自分类Dev

在python dict中使用DFS评估布尔逻辑

来自分类Dev

使用std :: map :: at时出错

来自分类Dev

Python3中的惰性评估

来自分类Dev

使用普通 map/reduce 函数时如何访问 SparkDataset Api 中的 json 模式信息?

来自分类Dev

将列表传递给方法时,python使用惰性分配

来自分类Dev

使用Map Reduce确定输入数据中的模式

来自分类Dev

使用map / reduce在列表中添加数字对的差

来自分类Dev

使用Map Reduce确定输入数据中的模式

来自分类Dev

在Python中评估布尔元组

来自分类Dev

如何在python中使用map,reduce,apply或其他函数转换DataFrame(在此示例中)?

来自分类Dev

在数组数组的map()中使用reduce()

来自分类Dev

使用Map Reduce实施储层采样

来自分类Dev

使用Map Reduce算法创建Rtree?

来自分类Dev

在Map Reduce作业中使用多线程

来自分类Dev

使用first last和map实现reduce

来自分类Dev

Spark:在 SparkSql 中使用 map 和 reduce

来自分类Dev

使用 map 和 reduce 获取对象数组

来自分类Dev

使用 map 和 reduce 转换数组

来自分类Dev

流中的惰性评估?

来自分类Dev

Xtensor中的惰性评估

来自分类Dev

使用列名执行“ map”时如何使用准引号/整洁的评估