python--map()、reduce()

7708 ワード

map()とreduce()はビッグデータを処理する際の重要な考え方であり,普段でも利用できる.pythonにはこの2つの方法が内蔵されており,mapはマッピングの意味をとり,reduceは帰納の意味をとる.
一、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))

    二、ruduce()
  • reduce(func, lsd)

  • パラメータ1は関数パラメータ2はシーケンス
    注意:reduceは導入する必要があります:from functools import reduce
  • 機能:1つの関数がシーケンスに作用し、この関数は2つのパラメータを受け入れなければならない.reduceは結果をシーケンスの次の要素と累積演算し続ける.
  • eg:reduce(f,[a,b,c,d])は、f(f(f(a,b),c),d)----fに等価であり、2つのパラメータを受け入れる関数である.
  •  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      

    三、総合
    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)