只有在完成迭代之后,您才能说出它有多少元素。内置len https://docs.python.org/3.4/library/functions.html?highlight=filter#len函数调用__len__ method https://docs.python.org/3.4/reference/datamodel.html?highlight=__len__#object.__len__一个物体的,正如你所看到的,filter
对象没有该方法
>>> '__len__' in dir(filter(bool, [0, 1, 2]))
False
因为它们基本上是迭代器。
查找长度的一种可能方法是
>>> sum(1 for _ in filter(bool, [0, 1, 2]))
2
另一种是将其转换为list
类型,当然有长度:
>>> len(list(filter(bool, [0, 1, 2])))
2
请注意,所有解决方案都会耗尽迭代器,因此您将无法重用它:
>>> f = filter(bool, [0, 1, 2])
>>> list(f)
[1, 2]
>>> list(f)
[]