python內(nèi)置可map()和reduce()函數(shù)陵刹。
我們先看map杂靶。map()函數(shù)接收兩個(gè)參數(shù)持搜,一個(gè)是函數(shù)吉殃,一個(gè)是Iterable辞居,map將傳入的函數(shù)依次作用到序列的每個(gè)元素楷怒,并把結(jié)果作為新的Iterator返回。
舉例說明瓦灶,函數(shù)f(x) = x平方鸠删,把這個(gè)函數(shù)作用在list[1,2,3,4,5,6,7,8,9]上,可以用map()實(shí)現(xiàn):
>>> def f(x):
return x * x
>>> r = map(f, [1,2,3,4,5,6,7,8,9])
>>> list(r)
[1,4,9,16,25,36,49,64,81]
把list所有數(shù)字轉(zhuǎn)為字符串:
>>> list(map(str, [1,2,3,4,5,6,7,8,9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce的用法贼陶,reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1,x2,x3,...]上刃泡,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算碉怔,效果是:
reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3)x4)比方說對(duì)一個(gè)序列求和捅僵,就可以用reduce實(shí)現(xiàn):
>>> from functools import reduce
>>> def add(x, y)
return x +y
>>> reduce(add, [1,3,5,7,9])
25
把str轉(zhuǎn)換為int函數(shù):
>>> from functools import reduce
>>> def fn (x, y):
return x * 10 + y
>>> def charnum(s):
digts = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
>>> reduce(fn, map(charnum, '13579'))
13579