一 . 高階函數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']