python map函数、filter函数、reduce函数
1.map函数:map(func,可迭代对象):
①func可以是自定义的函数,也可以是功能简单的匿名函数(通过lambda定义)
②处理逻辑:表示将传入的可迭代对象依次循环,将每个元素按照传入的func逻辑进行处理,再依次返回给原对象,结果与原列表的元素个数、顺序一致
③在python2中map的处理结果是一个列表,在python3中结果是一个迭代器,可通过list( )转换为列表查看内容,迭代器只可以进行一次处理操作,之后会清空
print(list(map(lambda x:x*2,[1,6,3,7])))---使用匿名函数 #执行结果为[1,36,9,49]
li=[-3,0,2,-8,5] def cal(a): if a>=0: pass else : a=-a return a print('将负数转化为正数',list(map(cal,li))) #使用自定义函数,传给map函数是自定义函数的函数名 #将负数转化为正数 [3, 0, 2, 8, 5]
2.filter函数:filter(func,可迭代对象):
①func可以是自定义的函数,也可以是功能简单的匿名函数(通过lambda定义)
②处理逻辑:表示将传入的可迭代对象依次循环,将每个元素按照传入的func逻辑进行处理,处理结果返回一个布尔值,真则保留,否则删除这个元素
③与map函数类似,filter函数在python3中的结果是一个迭代器,需通过list( )转换为列表查看内容
print(list(filter(lambda x:len(x)>5,['abcde','1234567','abcdefg','123']))) #执行结果为['1234567', 'abcdefg']
a=['abcde','1234567','abcdefg','123'] def f(x): if len(x)<5: return True else : return False print('保留长度小于5的元素',list(filter(f,a))) #执行结果为:保留长度小于5的元素 ['123']
3.reduce函数:reduce(func,可迭代对象[,初始值]):
①reduce函数使用之前需要先通过functools模块导入from functools import reduce
②func可以是自定义的函数,也可以是功能简单的匿名函数(通过lambda定义)
③处理逻辑:表示将传入的可迭代对象依次循环,将所有元素按照传入的func逻辑进行处理,最后得到一个值
from functools import reduce print('原列表为[1,3,6,8],所有元素相加所得结果为',reduce(lambda x,y:x+y,[1,3,6,8])) #执行结果为:原列表为[1,3,6,8],所有元素相加所得结果为 18
from functools import reduce array=['123','abc','456def','g'] def f(x,y): return x+y print('用haha拼接结果为',reduce(f,array,'haha')) #指定初始值 #执行结果为:用haha拼接结果为 haha123abc456defg---可看出字符串拼接时,指定的初始值放在最开头位置