Python:为什么我无法将地图对象转换为列表

时间:2019-02-12 11:05:19

标签: python python-3.x

在可以将地图转换为列表时,我无法将地图转换为列表

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]

1 个答案:

答案 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对象中没有更多项目。