【发布时间】:2010-09-06 09:18:00
【问题描述】:
(这是专业的最佳实践/模式兴趣,不是家庭作业要求)
INPUT:任何无序序列或生成器items,如果满足过滤条件,函数myfilter(item)返回True p>
OUTPUT:(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))
【问题讨论】:
标签: python filter generator data-partitioning