filter()函数两次输出结果不一致?
新人刚接触python,学到迭代器这里发现一个奇怪的问题,为什么两次输出的列表不一致?
def is_even(num): """
过滤偶数
"""
return num % 2 == 0
def square(num):
"""
求平方值
"""
return num ** 2
numbers1 = [35, 12, 8, 99, 60, 52]
filter1 = filter(is_even, numbers1)
print(f'第一次:{list(filter1)}') # [12, 8, 60, 52]
print(filter1)
print(f'第二次:{list(filter1)}') # []
print(filter1)
回答:
你要理解迭代器对象并不等同与列表对象,虽然其可以用list
来转换为列表,但这种转换是一次性的。
而filter
在python2中返回列表,在python3中返回迭代器对象,根据你的问题,你应该是在python3下运行的。
其实你可以这样认识,迭代器对象初始化后是一个指向一个队列第一个位置的,迭代完成后(用list
转换处理后),指向了末尾,其后因为已经没有实际数据了,所以重复使用list
来处理一个迭代器对象,只有第1次可以正确获得结果,其后都是返回空列表。
如果你想重复使用转换后的列表,你应该直接把这个结果存储起来,而不是再用list
去转换迭代器.
以上是 filter()函数两次输出结果不一致? 的全部内容, 来源链接: utcz.com/p/938390.html