我想使用列表理解来过滤列表,但是我的过滤器从未调用过,并且返回了原始列表中的所有项目。我在做什么错了?
def my_filter(value):
print('filter called')
return False
results = set([v for v in ['test'] if my_filter])
print(results)
结果:
{'test'}
答案 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']))