为什么过滤功能在列表理解中不起作用?

时间:2018-10-29 08:38:09

标签: python python-3.x filtering list-comprehension

我想使用列表理解来过滤列表,但是我的过滤器从未调用过,并且返回了原始列表中的所有项目。我在做什么错了?

def my_filter(value):
    print('filter called')
    return False

results = set([v for v in ['test'] if my_filter])

print(results)

结果:

{'test'}

1 个答案:

答案 0 :(得分:1)

我忘了实际调用过滤器功能!更正后的代码为:

results = set([v for v in ['test'] if my_filter(v)])

                                               ^^^
                                          difference here

对于列表中的每个项目v,我想检查my_filter(v)的真实性,即False。相反,我正在检查my_filter的真实性,这始终是真实的,所以所有项目都被退回了。

我认为我已经将列表理解语法与filter函数混淆了:

results = set(filter(my_filter, ['test']))