高階函數

 一 . 高階函數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']
相關文章
相關標籤/搜索