python--map()、reduce()

  map()和reduce()是一種在處理大數據時的重要思想,在平時也能夠利用。在python中內置了這兩個方法,map取映射的意思,reduce取概括的意思。python

1、map()

  • map(func, lsd)

  參數1是函數
  參數2是序列函數

  • 功能:將傳入的函數依次做用在序列中的每個元素,並把結果做爲一個新的Iterator返回。

    注:可迭代對象是個惰性的列表,直接輸出爲一個地址,要想輸出裏面內容要顯示的寫出來,eg:print(list(res))大數據

 1 # 下面實例的目標是將列表中的字符轉換爲整形
 2 
 3 def char2int(chr):  4     return {'0':0, '1':1, '2':2, '3':3}[chr] # 經過字典來返回轉換後的結果
 5 
 6 lis = ['2','1','3','0']  7 res = map(char2int, lis) # 用本身寫的函數映射到每一個元素上
 8 res2 = map(int, lis) # 經過內置函數來實現
 9 print(res) # 惰性列表,返回一個內存地址
10 print(list(res)) # 強制轉換成列表
11 print(list(res2))

2、ruduce()

  • reduce(func, lsd)

  參數1是函數
  參數2是序列spa

  注:reduce須要引入:from functools import reducecode

  • 功能:一個函數做用在序列上,這個函數必須接受兩個參數,reduce把結果繼續和序列的下一個元素累積運算。
    • eg:  reduce(f, [a,b,c,d]) 等價於f(f(f(a,b),c),d) ----f是一個接受兩個參數的函數。
 1 # 實現一個累加
 2 
 3 from functools import reduce  4 # 自定義的兩輸入加法
 5 def Sum(a,b):  6     return a + b  7 lis = [1,2,3,4,5]  8 
 9 res = reduce(Sum, lis) # 對序列中的元素相似遞歸的加進去
10 print(res) # 因爲reduce返回的只是一個結果,沒必要考慮map中提到的問題

3、綜合

  map、reduce常常是配合起來使用的,下面有一個簡單的例子,例子旨在介紹如何使用,無需關心是否實用。對象

 1 # 這段代碼是想要將一段數字的字符串轉換爲整型
 2 
 3 from functools import reduce # 引入reduce方法
 4 
 5 def str2int(str):  6         # reduce中使用的函數,將map轉換後的列表中元素,生成按順序排列的整型數字
 7     def fc(x,y):  8         return x * 10 + y  9         # 把字符串中每一個元素轉換成對應的整型數字,返回一個整型的列表
10     def fs(chr): 11         return {'0':0, '1':1, '2':2, '3':3,'4':4, '5':5, '6':6, '7':7, '8':8, '9':9}[chr] 12     return reduce(fc, map(fs,list(str))) # 先使用map函數把每一個元素轉成數字,而後用reduce函數把數字拼接起來
13 res = str2int('2314233123') 14 print(res)
相關文章
相關標籤/搜索