python 內建函式map、reduce的使用
阿新 • • 發佈:2019-02-18
參考:
#######################################
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)