2

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

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

2 回答 2

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
于 2013-02-16T07:13:57.573 回答
2

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

在第一种情况下,您将元组解包为1and(1,2,3)并查看第二个 ( (1,2,3)) ——它是真的(非空),所以filter返回整个东西。

在第二种情况下,您查看 tuple (1,(1,2,3))。那也不是空的,所以它再次返回整个东西。

于 2013-02-16T07:13:32.860 回答