- 本文作者: Yarving Liu
- 本文鏈接: http://yarving.historytale.com/2018/06/05/python-sum-map-filter-reduce/
- 版權(quán)聲明:本博客所有文章除特別聲明外榕栏,均采用 CC BY-NC-SA 4.0 許可協(xié)議畔勤。轉(zhuǎn)載請注明出處蕾各!
最近在看《Think Python》(英文版)扒磁,看到了講解map
, reduce
, filter
等函數(shù),覺得講解的思路特別好式曲。所以妨托,我加上了自己的理解,寫了本篇文章吝羞。
引子
如果要對列表中的數(shù)字求和兰伤,我們可以這樣做:
def add_all(t):
"""t is a list of nums"""
total = 0
for x in t:
total += x
return total
運行結(jié)果:
由于python中求和操作太常見了,所以python提供了內(nèi)置函數(shù)sum
來進行這項操作
sum
將上一版代碼修改如下:
if __name__ == '__main__':
t = [1, 2, 3, 4]
print sum(t)
運行結(jié)果:
像這種從一個列表中得出一個結(jié)果的操作钧排,也叫reduce敦腔,除了求和這一種reduce操作外,python還支持自定義的方式
reduce
比如恨溜,我不是想對隊列求和符衔,而是想得到列表各數(shù)字的乘積,可以利用reduce
這樣實現(xiàn):
def multiple_all(x, y):
return x * y
if __name__ == '__main__':
t = [1, 2, 3, 4]
print reduce(multiple_all, t)
運行結(jié)果:
上面介紹了將一個從一個列表得到一個結(jié)果的情形糟袁,還有一種情形是:按照某個規(guī)律對列表中的元素一一轉(zhuǎn)換判族,這就要用到map
內(nèi)置函數(shù)了
map
如果給定一個列表(元素為字符串),要把列表元素首字母大寫项戴,可以這樣做
if __name__ == '__main__':
t = ['hello', 'world', 'yarving']
print map(lambda x: x.capitalize(), t)
運行結(jié)果:
還有一種情況形帮,是要將列表里的元素過濾出去,可以用到filter
函數(shù)
filter
給定一個列表(元素為數(shù)字)周叮,如果要僅保留不大于4的數(shù)字辩撑,可以這樣做:
if __name__ == '__main__':
t = [1, 2, 3, 4, 5, 6, 7]
print filter(lambda x: x <= 4, t)
運行結(jié)果:
獲取《Think Python》(英文版)電子書
如想要獲取《Think Python》(英文書)的PDF版本,可發(fā)送郵件到 yarving@qq.com 仿耽,并標明主題 "Think Python" 合冀。