python高阶函数map & filter & reduce & so
高阶函数为把函数作为参数传入的函数 ? 引用链接 高阶函数 ? 环境 python3.6 ? map 1. 多个序列时,若是长度最短的序列所有元素都已映射,则整个map函数结束 from collections import Iterator a_li,b_li,c_li = list(range(10)),list(range(104)),list(range(1,15)) m1 = map(lambda x,y,z: x + y + z,a_li,c_li) print(isinstance(m1,Iterator)) print(list(m1)) 返回的生成器只迭代到最短的序列的所有元素,结果为 True [1,4,7,10,13,16,19,22,25,28] 2. 函数参数除了使用匿名函数,也可以使用自定义的映射函数 def map_func(x,z): return x + y + z + 10 m2 = map(map_func,c_li) print(list(m2)) 传入函数名,结果为 [11,14,17,20,23,26,29,32,35,38] ? reduce reduce把一个函数作用在一个序列[x1,x2,x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是 reduce(f,[x1,x3,x4]) = f(f(f(x1,x2),x3),x4) 1. 将数字字符串转为整数 s = "12344" num_dic = {num: int(num) for num in "0123456789"} res = reduce(lambda x,y: x * 10 + y,map(lambda i: num_dic[i],s)) print(res) map将字符串转为数字序列并返回生成器,redcue将序列根据匿名函数转为整数,结果为 12344 reduce中initial参数为初始化时匿名函数的第一个参数,initial=9 res2 = reduce(lambda x,s),9) print(res2) 结果为 912344
filter 1. 过滤 b_li 序列,返回平方根为整数的生成器 import math f2 = filter(lambda x: math.sqrt(x) % 1 == 0,list(range(100))) print(list(f2)) 对平方根的值与1作除法获取余数,结果为 [0,1,9,36,49,64,81] ? sorted 排序是比较两个元素的大小。数字直接比较,字符串根据ascii比较,dict可获取items()根据健、值等元素比较。key参数可以实现自定义的排序,即排序关键在于实现一个映射函数 1. 实现数字的降序排序,reversse参数默认为False升序。 order_li = sorted([36,5,-12,-21],reverse=True) print(order_li) 结果为 [36,-21] 2.?实现数字绝对值的升序排序 order_li = sorted([36,key=lambda x: abs(x)) print(order_li) 结果为 [5,-21,36] 3. 忽略大小写,实现首字母的升序排序 order_li = sorted([‘bob‘,‘Zoo‘,‘Credit‘],key=lambda x: x.lower()) print(order_li) 转为全部小写,根据首字母排序,结果为 [‘bob‘,‘Credit‘,‘Zoo‘] 4. 字典排序。根据健升序排序 dic = {2: [30,‘y‘],1: [96,‘i‘],3: [21,‘w‘],9: [40,7: [20,‘y‘]} print(dic.items()) order_dic_li = sorted(dic.items(),key=lambda x: x[0]) order_dic = {i[0]: i[1] for i in order_dic_li} print(order_dic) 字典获取items()方法,对象为dict_items。根据健排序即根据dict_items对象的第一个元素排序,结果为 dict_items([(2,[30,‘y‘]),(1,[96,‘i‘]),(3,[21,‘w‘]),(9,[40,(7,[20,‘y‘])]) {1: [96,2: [30,‘y‘]} 5. 字典排序。根据值的元素排序,优先级为值的第二个元素、第一个元素,两者为升序排序 order_dic_li = sorted(dic.items(),key=lambda x: (x[1][1],x[1][0])) order_dic = {i[0]: i[1] for i in order_dic_li} print(order_dic) 根据值的两个元素排序,结果为 {1: [96,‘y‘]} 6. 根据字典值的元素排序,优先级为值的第二个元素、第一个元素;排序为第二个元素升序,第一个元素降序 order_dic_li = sorted(dic.items(),-x[1][0])) order_dic = {i[0]: i[1] for i in order_dic_li} print(order_dic) 结果为 {1: [96,‘y‘]} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |