这是经典的python3 doh!。
过滤器是可以迭代的特殊可迭代对象。但是,就像生成器一样,您只能对其迭代一次。因此,通过调用list(people2)
,您可以遍历filter
对象的每个元素以生成list
。至此,您已经到达了迭代的尽头,仅此而已。
因此,当您list(people2)
再次致电时,您会得到一个空列表。
演示:
>>> l = range(10)
>>> k = filter(lambda x: x > 5, l)
>>> list(k)
[6, 7, 8, 9]
>>> list(k)
[]
我应该提到python2,它filter
返回一个列表,所以您不会遇到这个问题。当您将py3的惰性评估带入图片时,就会出现问题。