最好,有效的方法来获得序列项的结果元组满足和不满足条件

Tony Veijalainen 3 python generator filter data-partitioning

(这是专业的最佳实践/模式兴趣,而不是家庭工作要求)

  • INPUT:任何无序序列或生成器,函数myfilter(item)如果满足过滤条件则返回True

  • OUTPUT:(filter_true,filter_false)原始类型序列的元组,其包含按原始序列顺序根据过滤器分区的元素.

如果不进行双重过滤,你会如何表达这一点,还是应该使用双重过滤?也许filter和loop/generator/list comprehencion next可以回答?

我是否应该考虑保持类型或只是改变要求给出元组/发电机结果的元组,我不能轻易返回发电机输入发电机,或者我可以吗?(要求是自制的)

这里测试最佳候选人,提供两个流而不是元组

import itertools as it
from sympy.ntheory import isprime as myfilter

mylist = xrange(1000001,1010000,2)
left,right = it.tee((myfilter(x), x) for x in mylist)
filter_true = (x for p,x in left if p)
filter_false = (x for p,x in right if not p)

print 'Hundred primes and non-primes odd  numbers'
print  '\n'.join( " Prime %i, not prime %i" %
                  (next(filter_true),next(filter_false))
                  for i in range(100))

John La Rooy.. 5

这是一种方法,它只myfilter为每个项目调用一次,如果mylist是生成器也可以工作

import itertools as it
left,right = it.tee((myfilter(x), x) for x in mylist)
filter_true = (x for p,x in left if p)
filter_false = (x for p,x in right if not p)