过滤神秘输出

Dar*_*ary 4 python lambda list filter

我正在读书filter,lambda而且map.当我尝试使用它们时,我发现了这个特点:

def returnAsIs(element):
    return element

print range(10)
print filter(returnAsIs, range(10))
print map(lambda x : x, range(10))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

为什么过滤器省略了第一个条目?

Rah*_*pta 7

为什么0跳过元素filter()

发生这种情况是因为价值0评估为False.

根据.filter()文档:

从iterable的那些元素构造一个列表,该函数返回true.

因此,当我们应用于filter(function, iterable)a时iterable,只返回函数返回的那些元素True.

当Python迭代元素09,它会检查哪个元素的计算结果True只返回那些元素.现在,0进行求值,False以便不返回此值filter().只有从分子19返回.

如何检查元素的布尔值?

由于您的函数按原样返回元素,因此我们需要检查哪些元素的计算结果True.只返回那些评估为的元素True.

要检查布尔值,我们可以使用该bool() 函数.

In [1]: for x in range(10):
   ...:     print x, bool(x)
   ...:     
0 False # boolean-ness of '0' is False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
Run Code Online (Sandbox Code Playgroud)