高階函數map,filter,reduce及lambda表達式

高階函數及lambda表達式

高階函數

fiter(),zip(),map(),reduce()

name=['milo','zou','tom']
age=[20,30,40]
tel=['133','159','189']

現在讓3個list列表相關聯,用zip(name,age,tel),在用zip並行遍歷時,3個列表中的元素是一樣多的,如果元素個數不同,會按照最短原則配對(木桶短板)截斷

zip()

>>> list(zip(age,name,tel))
[(20, 'milo', '133'), (30, 'zou', '159'), (40, 'tom', '189')]
>>> zip(name,age,tel)
[('milo', 20, '133'), ('zou', 30, '159'), ('tom', 40, '189')]

>>> hobby=['football','baskteball']
>>> zip(name,age,tel,hobby)
[('milo', 20, '133', 'football'), ('zou', 30, '159', 'baskteball')]

map()

map()函數還可以將函數func傳遞爲形參,對遍歷後的列表進行額外計算操作


>>> a=[1,3,5]
>>> b=[2,4,6]
>>> c=[2,4,6]
>>> def mf(x,y,z):
	return x*y*z

>>> map(mf,a,b,c)
[2, 12, 30]

reduce()

階乘操作
reduce()可以更簡單的實現遞歸

case1
>>>n=0
>>> for i in range(100):
	n+=i
	print(n)
可以看出這種方式比較笨

case2	利用reduce()函數的特性
>>> def sum(x,y):
	return x+y

>>> reduce(sum,range(10))
45
>>> reduce(sum,range(100))
4950
>>> 

reduce當然還支持lambda 匿名函數
reduce(lambda x,y:x+y,range(100))
>>> reduce(lambda x,y:x+y,range(100))
4950

filter()

filter()函數同樣也支持這樣用法

>>> filter(lambda x:x%2,range(15))
[1, 3, 5, 7, 9, 11, 13]
>>> 

lambda表達式(匿名函數)

簡單用例

foo=[2,18,9,22,17,24,8,13,27]
print filter(lambda x:x%3==0,foo)
print map(lambda x:x*2+10,foo)
print reduce(lambda x,y:x+y,foo)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章