什么会阻止过滤器返回0?

时间:2012-08-16 18:18:00

标签: python filter boolean

当我尝试使用[1,2,0,3,8]过滤if x < 3: return x时,我最终得到[1,2]。为什么0未包含在此列表中?

def TestFilter(x):
    if x < 3: 
        return x

a = [1,2,0,3,8]
b = filter(TestFilter, a)
print b

2 个答案:

答案 0 :(得分:10)

每次函数返回True filter()时,都会将原始列表中的当前元素添加到新列表中。 Python认为0False,其他任何数字为True。因此,您需要让函数返回True而不是数字。

def TestFilter(x):
    if x < 3: 
       return True

编辑:这是一个lambda示例:

a = [1, 2, 3, 0, 4, 8]
print filter(lambda x: x < 3, a)

答案 1 :(得分:3)

过滤时,您希望返回True或False。这就是你想要的:

def TestFilter(x):
    return x < 3

使用此功能进行过滤后,您将获得您正在寻找的结果。