[英]Python filter not working as expected?
为什么以下两个过滤器表达式返回相同的结果?
A = [(1,(1,2,3))]
A1 = filter(lambda (a,b): b, A)
A2 = filter(lambda ab: ab, A)
A1 == A2
>>>> True
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
这不是错误。 filter
接受元素,其中函数返回True
-y值。
在第一种情况下,将元组解压缩为1
和(1,2,3)
然后查看第二个( (1,2,3)
)-这是真的(非空),所以filter
返回整个事情。
在第二种情况下,您查看元组(1,(1,2,3))
。 那也不是空的,因此它再次返回整个东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.