1、生成器(generator)
列表中存放的数据有很多时,会占用大量的内存空间,而且有些列表里面的元素我们可能不会用到,列表元素可以按照某种算法推算出来,我们可以在循环的过程中不断推算后续的元素,而不用把列表里面所有元素都输入进去,在Python中,这种一边循环一边计算的机制,称生成器
生成器的生成方法一:列表生成式中的[]换成()
a=(i for i in range(1,10))
print(a) #a就是一个生成器
print(next(a)) #一个一个的提取生成器里面的元素,如果一个生成器里面的元素提取出来的话,接下来对生成器进行遍历或者转换为列表时,就没有已经提取出来的元素了,没有数据继续提取则会报错StopIteration
#生成器可以用for in进行遍历
for i in a:
print(a)
#生成器可以转换成列表
print(list(a))
方式二:使用yield
def test(n)
for i in range(1,n):
yield i #每次获取一个元素,yield后面的值会返回,每次执行到yield程序又会停止
t=test(5) #t时一个生成器
print(t)
2、迭代器
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
迭代器都可以使用for in进行遍历,但是字典、元组、集合等不是迭代器,它们是可迭代的对象,生成器是特殊的迭代器
from collections import Iterator ,Iterable
a=(i for i in range(1,10))
print(isinstance(a,Iterator)) #判断是否是迭代器
lt=[2,3,5,1,2]
print(isinstance(lt,Iterable)) #判断是否是可迭代对象
lt2=iter(lt) #将可迭代对象转换为迭代器
print(isinstance(lt2,Iterator))
3、map 函数
map(function,iterable) (一个函数,一个可迭代的对象)
from collections import Iterator
lt=[2,3,5,6,1]
m=map(lambda x,y:x+y,lt)
print(m)
print(isinstance(m,Iterator)) #map对象是一个迭代器
4、filter参数:func(一个函数),iter1(一个可迭代的对象)
功能:使用func函数依次作用于interable中每个元素,返回的迭代器中会保留结果为真的数据
from collections import Iterator
lt=[2,1,5,9,4,3]
f=filter(lambda x:x%2==0,lt)
print(f)
print(isinstance(f,Iterator))
for i in f:
print(i)
5、reduce 参数:function(一个函数),sequeue(一个序列)
首先从序列中提取两个元素使用function进行处理,处理的结果和下面的一个元素再使用function进行处理
from functools import reduce
lt=[6,3,2,4,8]
result=reduce(lambde x,y:x+y,lt)
print(result)