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

标签 python filter generator data-partitioning

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

  • 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/

相关文章:

python - 需要 float ?? Python 中的 round() 错误

NHibernate 过滤器集合

java - Appengine 查询似乎忽略了我的过滤器之一(Java)

python - 使用多处理将来自多个数据加载器的对象填充到队列中

cmake - 什么是 CMake 生成器?

flask - 如何让 flask 将生成器传递给 celery 等任务

python - 多索引列 - 选择内部

python - 与底商相比的整数除法 : why this surprising result?

python - 导入 python 模块时如何解决 KeyError?

delphi - 仅提供音频的 DirectShow 推送源过滤器的正确样本大小是多少?