一 . 高阶函数python
Google 文章函数
python 内置了map() 和 reduce()函数spa
map()
原型: map(fn,lsd)code
参数1 是函数
参数2 是序列blog
功能: 将传入的函数依次做用在序列的没一个元素,
并把结果做为新的Iterator返回排序
1. 阶高函数map字符串
# 将单个字符串转换成对应的字面量整数 def chr2int(chr): return {"0":0,"1":1,"2":2,"3":3,"4":4, "5":5,"6":6,"7":7,"8":8,"9":9}[chr] listl=["2","1","6","5"] res=map(chr2int,listl) # 至关于 chr2int("2") chr2int("1") chr2int("6") chr2int("5") print(res) #这个打印出来是惰性列表 <map object at 0x003B3710> print(list(res)) #这样是个列表 [2, 1, 6, 5] print(type(res)) #<class 'map'> print("*******************华丽的分割线*************************") # 将整数元素的序列,转为字符串型 # [1,2,3,4]->["1","2","3","4"] l=map(str,[1,2,3,4]) print(list(l)) #['1', '2', '3', '4']
阶高函数reduce
from functools import reduce reduce(fn ,lsd) 参数1为函数 参数2为列表 功能 一个函数做用在序列上,这个函数必须接受两个参数, reduce 把结果继续和序列的下一个元素累计计算 例如: reduce(f,[a,b,c,d]) 至关于 f(f(f(a,b),c),d) # 求一序列的和 list2=[1,2,3,4,5] # 1+2 # 1+2+3 # 1+2+3+4 # 1+2+3+4+5 def aa(x,y): return x+y r=reduce(aa,list2) print("r=",r) #15
阶高函数reduce
from functools import reduce # reduce(fn ,lsd) # 参数1为函数 # 参数2为列表 # 功能 一个函数做用在序列上,这个函数必须接受两个参数, # reduce 把结果继续和序列的下一个元素累计计算 # 例如: # reduce(f,[a,b,c,d]) 至关于 f(f(f(a,b),c),d) # 求一序列的和 list2=[1,2,3,4,5] # 1+2 # 1+2+3 # 1+2+3+4 # 1+2+3+4+5 def aa(x,y): return x+y r=reduce(aa,list2) print("r=",r) #15
2. reduce和map案例原型
# 1356 案例分析 """ 0x1+1 1x10+3 13x10+5 135x10+6 """ from functools import reduce # 将字符串转换成对应字面量数字 def srt2int(str): def fc(x,y): return x*10+y def fs(chr): return {"0":0,"1":1,"2":2,"3":3,"4":4, "5":5,"6":6,"7":7,"8":8,"9":9}[chr] return reduce(fc,map(fs,list(str))) #至关于 map(fs,list(str))=》12367 a=srt2int("12367") print(a) # 12367 print(type(a)) # <class 'int'>
3 .高阶函数filterclass
# 原型 : filter (fn,lsd) # 参数1 为函数 # 参数2 为序列 # 功能: 过滤 # 白话文 : 把传入的函数依次做用与序列每一个元素, # 根据返回的是True仍是False 决定是否保留改元素 listl=[1,2,3,4,5,6,7,8,9] # 筛选条件 def func (num): # 偶数保留 if num%2==0: return True # 奇数剔除 return False L=filter(func,listl) print(list(L)) #[2, 4, 6, 8] print("*******************华丽的分割线*************************") # 数据的过滤 data=[["姓名","年龄","爱好"],["tom",25,"无"],["tom",2555500000,"金钱"]] def func2(v): v=str(v) if v=="无": return False return True for line in data: m=filter(func2,line) print(list(m)) # ['姓名', '年龄', '爱好'] # ['tom', 25] # ['tom', 2555500000, '金钱']
高阶函数sorted
# sorted 排序 # 排序 : 冒泡 选择 快速 插入 计数器 #升序排列 list1=[4,7,2,6,3] list2=sorted(list1) #默认升序 print(list2) #[2, 3, 4, 6, 7] print("*******************华丽的分割线*************************") # 按照绝对值大小来排序的 list3=[4,-7,2,6,-3] list4=sorted(list3,key=abs) # key接受函数来实现自定义排序规则 print(list4) # [2, -3, 4, 6, -7] print("*******************华丽的分割线*************************") # 降序排序 list5=[4,7,2,6,3] list6=sorted(list5,reverse=True) print(list6) # [7, 6, 4, 3, 2] print("*******************华丽的分割线*************************") # 字符串排序是阿斯扣吗值 list7=["a","b","c","d","e"] list8=sorted(list7) #默认升序 print(list8) #['a', 'b', 'c', 'd', 'e']