filter()函数两次输出结果不一致?

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

回到顶部