(这是专业的最佳实践/模式兴趣,不是家庭作业要求)
INPUT:任何无序序列或生成器items,如果满足过滤条件,函数myfilter(item)返回True
输出:(filter_true, filter_false) 序列的元组 包含的原始类型 元素划分根据 按原始顺序过滤。
如果不做双重过滤,你会如何表达,或者我应该使用双重过滤?也许使用 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))
最佳答案
这是一种方法,它只为每个项目调用一次 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)
关于python - 获得满足和不满足条件的序列项的结果元组的最好、最有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650305/