在可以将地图转换为列表时,我无法将地图转换为列表
list_nums_2 = [2, 4, 5, 9, 8, 7, 6, 3, 1, 0]
evens = filter(lambda a: a % 2 == 0, list_nums_2)
print(set(evens)) # Out: {0, 2, 4, 6, 8}
print(list(evens)) # Out: []
我知道不是因为它已经从下面转换为set了,很明显,可以将set转换为list。
set_1 = {2, 3, 4, 5, 6}
print(list(set_1)) # Out: [2, 3, 4, 5, 6]
答案 0 :(得分:7)
运行set(evens)
时,它消耗了filter
对象中的所有项目。因此,执行list(evens)
时没有可用的项目,并返回一个空列表。
filter
对象是一个迭代器,它是可迭代的,因此您可以对其调用next()
以获取下一项:
>>> evens = filter(lambda a: a % 2 == 0, list_nums_2)
>>> evens
<filter object at 0x7f2f4c309710>
>>> next(evens)
2
>>> next(evens)
4
>>> next(evens)
8
>>> next(evens)
6
>>> next(evens)
0
>>> next(evens)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
例外是因为filter
对象中没有更多项目。