概念
以一个函数作为参数,返回一个结果,被称为高阶函数
map()
map(function,Interable),其中function:函数;Interable:可迭代对象【list,tuple,dict,set,string,生成器】
#需求1:给一个已知列表中的元素求平方 def square(x): return x ** 2 list1 = [1,2,3,4,5] result1 = map(square,list1) print(result1) #<map object at 0x00000245058B0DD8> print(type(result1)) #<class 'map'> print(list(result1)) #[1, 4, 9, 16, 25] #需求2:将整型元素的列表转换为字符串元素的列表 #举例:[1,2,3,4,5]---->[“1”,'2','3','4'] #str(1) ---->’1‘ #注意:在使用系统函数之前,最好不要出现同名的变量 result3 = map(str,[1,2,3,4]) print(list(result3)) #需求3:已知两个整型列表,将两个列表中相同位置的元素求和,返回一个新的列表 l1 = [1,2,3,4] l2 = [5,6,7,8] #[6,8,10,12] def add(x,y): return x + y result4 = map(add,l1,l2) print(list(result4))
作用:将传入的函数依次作用于可迭代对象中的每一个元素,并将结果返回
reduce()
reduce(function,Iterable) ,其中function;函数;Iterable:可迭代对象,最常用的是list
from functools import reduce #需求1:求一个已知列表中所有元素的和 list1 = [1,2,3,4,5] def add(x,y): return x + y result1 = reduce(add,list1) print(result1) #15 #需求2:将列表[1,3,5,7,9]转换为整数13579 list2 = [1,3,5,7,9] def func(x,y): return x * 10 + y result2 = reduce(func,list2) print(result2) #需求3:结合map函数,实现一个将str转换为int的函数 int() #前提:字符串为全数字组成的 def strToInt(s): d = {"0":0,"1":1,"2":2,"3":3} return d[s] #第一步:将字符串中的每一个字符转换为对应的整型,得到一个列表 result3 = map(strToInt,"2301") print(list(result3)) #[2, 3, 0, 1] #第二步:将列表中的每一个数字元素进行累积 result4 = reduce(func,list(result3)) print(result4) #2301
作用:通过函数对可迭代对象中的元素进行累积,如何进行累积取决于函数中是如何实现的
工作原理:用传给reduce的fucntion先作用于list中的第一个和第二个元素,用得到的结果和list中第三个元素再进行指定的计算。。。
filter()
filter(function,Iterable),其中 function:函数,Iterable:可迭代对象,最常用的是list
#需求1:将已知列表中的偶数元素筛选出来 list1 = [1,2,3,4,5,6,7,8,9,10] def func(num): #保留偶数元素 if num % 2 == 0: return True #剔除奇数元素 return False result1 = filter(func,list1) print(type(result1)) #<class 'filter'> print(list(result1)) #[2, 4, 6, 8, 10] #需求2:将下面列表中 爱好为"无"的数据剔除掉 data = [["姓名","爱好","年龄"],["jack","dance",10],["bob","无",18]] def func2(v): v = str(v) if v == "无": return False return True for line in data: result2 = filter(func2,line) print(list(result2)) ''' ['姓名', '爱好', '年龄'] ['jack', 'dance', 10] ['bob', 18] '''
作用:进行数据的过滤
工作原理:将传入的函数依次作用于列表中的每一个元素,根据返回的结果为True或者False决定元素是否需要保留
sorted()
#1.普通排序 #注意:生成了一个新的列表,默认为升序排序 list1 = [3,2,5,6,2,4] list2 = sorted(list1) print(list1) #[3, 2, 5, 6, 2, 4] print(list2) #[2, 2, 3, 4, 5, 6] #2.按绝对值排序 #注意:sorted函数中,可以通过关键字key进行指定排序的规则 list3 = [-4,27,-10,5] list4 = sorted(list3,key=abs) print(list4) #[-4, 5, -10, 27] #3.降序排序 #注意:关键字reverse,reverse=True说明降序 list5 = sorted(list1,reverse=True) print(list5) #[6, 5, 4, 3, 2, 2] #4.字符也可以排序,排序的规则:在字典中出现的先后顺序 list6 =['g','o','f','a'] list7 = sorted(list6) print(list7) #['a', 'f', 'g', 'o'] #5.自定义函数:按照字符串的长度进行排序 def myLen(s): return len(s) list8 = ["fhgh","hello","abc","ll"] list9 = sorted(list8,key=myLen,reverse=True) print(list9) #['hello', 'fhgh', 'abc', 'll']