3

当我尝试过滤[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
4

2 回答 2

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)
于 2012-08-16T18:23:41.710 回答
3

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

def TestFilter(x):
    return x < 3

当您使用它进行过滤时,您将获得您正在寻找的结果。

于 2012-08-16T18:27:35.370 回答