小编Alf*_*rud的帖子

将多个过滤器应用于元组列表

我正在寻找一种有效的pythonic方法,将多个过滤器应用于元组列表.

举个例子,假设这样的过滤器:

def f1(t): return t[3]<10
def f2(t): return t[0]!=1
def f3(t): return t[1] in ("lisa","eric")
def f4(t): return t[3]>2
Run Code Online (Sandbox Code Playgroud)

像这样的n元组(即db-records):

tuples=[
(0,'tom','...',8),
(1,'john','...',17),
(2,'lisa','...',1),
(3,'eric','...',18)
]
Run Code Online (Sandbox Code Playgroud)

以下作品:

def nFilter(filters,tuples):
    if filters and tuples:
        return nFilter(filters,filter(filters.pop(),tuples))
    else: return tuples
Run Code Online (Sandbox Code Playgroud)

结果如下:

>>> nFilter([f1,f2,f3],tuples)
[(2, 'lisa', '...', 1)]
Run Code Online (Sandbox Code Playgroud)

>>> nFilter([f1,f2,f3,f4],tuples)
[]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更直接的方式; 我想到的是功能组合(即f1(f2(...fn(tuples)...))),用于任意功能列表.在文档中引用了包含函数的函数库compose,但链接都已死亡.

此外,由于我计划在相当大的数据集上使用它,并且可能在生产Web服务中使用大量过滤器,因此它必须是高效的,并且我无法确切地说这个解决方案是否正确.

欢迎任何建议或改进.

python tuples filter

20
推荐指数
5
解决办法
1万
查看次数

char(*)[int]在C++中的含义是什么?

我正在阅读关于SFINAE的这篇文章,我找到了这对有趣的功能:

template<int I> void div(char(*)[I % 2 == 0] = 0) {
    // this overload is selected when I is even
}
template<int I> void div(char(*)[I % 2 == 1] = 0) {
    // this overload is selected  when I is odd
}
Run Code Online (Sandbox Code Playgroud)

这很好用(g ++ - 4.9),但我并不真正理解参数的类型(char(*)[int]-part.).其他人呢?

c++ templates sfinae

4
推荐指数
2
解决办法
378
查看次数

标签 统计

c++ ×1

filter ×1

python ×1

sfinae ×1

templates ×1

tuples ×1