Python 中的map、reduce函式用法

記憶殘留發表於2017-07-18
#-*- coding:UTF-8 -*-

#map()函式接受兩個引數,一個是函式,一個是序列,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的list返回

def   f(x):
    return  x*x

result=map(f,[1,2,3,4,5])
print  result    # ==>> [1, 4, 9, 16, 25]

#map()作為高階函式,它把運算規則抽象了,我們還可以計算任意複雜的函式,比如把list所有的數字轉為字串:

print  map(str,[1,2,3,4,5])   # ==>>  ['1', '2', '3', '4', '5']


#reduce  把一個函式作用在一個序列上,reduce同樣必須接收兩個函式,reduce把結果繼續和序列和下一個元素做累積計算,其效果是:
#reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)
#對一個序列求和,可以用Python內建函式sum(),也可以用reduce來實現:
def  add(x,y):
    return x+y
print  reduce(add,[1,3,5,7,9])    #  ==>> 25

#把序列[1,3,5,7,9]變成整數13579

def  fn(x,y):
    return  x*10+y

print  reduce(fn,[1,3,5,7,9])    # ==>> 13579

#字串也是一個序列,配合map,可以寫出把str轉為int的函式
def char2num(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

print  reduce(fn,map(char2num,'13579'))  # ==>>  13579

#整理成一個str2int的函式:

def   str2int(s):
    def  fn(x,y):
        return   x*10+y
    def  char2num(s):
        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    return  reduce(fn,map(char2num,s))

print  str2int(['1','3','5','7','9'])   # ==> 13579


#利用lambda函式進一步簡化
    
def   str2int2(s):
    return reduce(lambda x,y:x*10+y,map(char2num,s))



    
    
    

 

相關文章