如果我可以在变量中定义过滤器,那么可以使用该变量来过滤数据框或过滤器列表吗?
例如,我可以使用代码过滤列表:
l = [1,2,3,4,5]
f = [i for i in l if i > 3]
f
有没有一种方法可以在变量中定义过滤器? (下面的代码不起作用)
ft = repr('if i > 3')
f_repr = [i for i in l eval(ft)]
f_repr
答案 0 :(得分:3)
您可以使用lambda函数执行此操作。
ft=lambda i:i>3
f_repr=[i for i in l if ft(i)]
f_repr
答案 1 :(得分:2)
您只能执行以下操作:
cond = lambda i: i> 3
然后:
f = [i for i in l if cond(i)]
或者:
f = list(filter(cond, l))
或者对于熊猫,可以。
答案 2 :(得分:0)
使用numpy数组非常简单
f_repr = f[f>3]
答案 3 :(得分:-1)
使整个表达式成为字符串,然后eval
。
l = [1,2,3,4,5]
cond = 'if i > 3'
expr = f'[i for i in l {cond}]'
eval(expr) # => [4, 5]