#-*- 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))