filter和map对象只能调用一次么?
用的python3.6.5,使用filter或者map函数的结果第一次传给list()函数可以产生对应的列表,但是再次调用就不行了、请问为什么?>>> temp=filter(lambda x:x%2,range(10))
>>> list(temp)
>>> list(temp)
[]
>>> temp1=map(lambda x:x**2,range(10))
>>> list(temp1)
>>> list(temp1)
[]
是的 本帖最后由 Twilight6 于 2020-5-24 14:30 编辑
因为你经过filter过滤后返回的对象类型是 'filter' 对象'filter' 算迭代器而不是可迭代的对象
你可以试着这样运行代码 :
print(next(temp))
print(next(temp))
print(next(temp))
print(list(temp))
print(list(temp))
你会发现后面打印的元素少了 1 3 5因为被next 先输出了
同理 你这里是一次性把整个转化为列表下一次就不能再次进行转化了
Twilight6 发表于 2020-5-24 14:27
因为你经过filter过滤后返回的对象类型是 'filter' 对象'filter' 算迭代器而不是可迭代的对象
...
map 同理~ 你只要记住迭代器都有这种特征就好
页:
[1]