1. 程式人生 > >python 內建函式map、reduce的使用

python 內建函式map、reduce的使用

參考:

#######################################

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

例:計算平方:

def f(x):
      return x*x

map(f, [1,2,3,4,5])



map函式傳入的第一個引數是f,即函式物件本身

可以使用一個迴圈計算平方:

L=[]
for n in range(1, 6):
     L.append(f(n))
print L


只不過使用map更加一目瞭然

map()函式作為高階函式,它把運算規則抽象了,因此,我們可以計算任意複雜的函式。

例如:

把list中所有數字轉為字串:

map(str, [1,2,3,4,5])
把字串轉化為列表:
def char2num(s):
      return {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5}[s]

map(char2num, '12345')



#########################################

reduce把一個函式作用於一個序列[x1,x2,x3,...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下一個元素做累積計算,其效果為:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

例如:對一個序列求和:

def add(x, y):
      return x+y

reduce(add, [1, 3, 5, 7, 9])


note:求和運算只用內建函式sum()更加方便

sum([1,3,5,7,9])


例如:把序列轉換為整數:

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

reduce(fn, [1,3,5,7,9])


字串str也是一個序列,所以配合map(),可以把str轉換為int的函式:

def fn(x, y):
      return x*10+y
def char2num(s):
      return {'1':1, '3':3, '5':5, '7':7, '9':9}[s]
reduce(fn, map(char2num, '13579'))


統一為一個函式如下:

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


利用map函式,把使用者輸入的不規範的英文名字,變成首字母大寫,其他小寫的規範名字。

def func(s):
      def standard(s):
            if len(s) > 0 and isinstance(s, str):
                  if len(s) > 1:
                        return s[0].upper()+s[1:].lower()
                  elif len(s) == 1:
                        return s.upper()

def name(x):
      return map(func, x)


編寫一個prod()函式,可以接受一個list並利用reduce()求積

def prod(s):
      def func(x, y):
            return x*y
      return reduce(func, s)