Python过滤器没有按预期工作?

时间:2013-02-16 07:10:30

标签: python filter

为什么以下两个过滤器表达式返回相同的结果?

A = [(1,(1,2,3))]
A1 = filter(lambda (a,b): b, A)
A2 = filter(lambda ab: ab, A)
A1 == A2
>>>> True

2 个答案:

答案 0 :(得分:3)

filter过滤掉传递给函数的参数,返回False - ish值。 (1, 2, 3)(1, (1, 2, 3))都在布尔上下文中返回True,因此保留在返回的列表中。

您想要map

A1 = map(lambda (a,b): b, A)
A2 = map(lambda ab: ab, A)

仅供参考,以下值为False - ish值,而其他所有值均为True - ish:

0
None
False
''
[]
()
# and all other empty containers

答案 1 :(得分:2)

这不是一个错误。 filter获取函数返回True - y值的元素。

在第一种情况下,您将元组解压缩为1(1,2,3),然后查看第二个元组((1,2,3)) - 它是真的(非空),所以{ {1}}返回整个事情。

在第二种情况下,你看一下元组filter。这也不是空的,所以它会再次返回整个事物。