Python中reduce函數(shù)詳解
reduce函數(shù)原本在python2中也是個(gè)內(nèi)置函數(shù),不過(guò)在python3中被移到functools模塊中。
reduce函數(shù)先從列表(或序列)中取出2個(gè)元素執(zhí)行指定函數(shù),并將輸出結(jié)果與第3個(gè)元素傳入函數(shù),輸出結(jié)果再與第4個(gè)元素傳入函數(shù),…,以此類(lèi)推,直到列表每個(gè)元素都取完。
1 reduce用法
對(duì)列表元素求和,如果不用reduce,我們一般常用的方法是for循環(huán):
def sum_func(arr): ? ? if len(arr) <= 0: ? ? ? ? return 0 ? ? else: ? ? ? ? out = arr[0] ? ? ? ? for v in arr[1:]: ? ? ? ? ? ? out += v ? ? ? ? return out a = [1, 2, 3, 4, 5] print(sum_func(a))
可以看到,代碼量比較多,不夠優(yōu)雅。如果使用reduce,那么代碼將非常簡(jiǎn)潔:
from functools import reduce a = [1, 2, 3, 4, 5] def add(x, y): return x + y print(reduce(add, a))
輸出結(jié)果為:
15
2 reduce與for循環(huán)性能對(duì)比
與內(nèi)置函數(shù)map和filter不一樣的是,在性能方面,reduce相比較for循環(huán)來(lái)說(shuō)沒(méi)有優(yōu)勢(shì),甚至在實(shí)際測(cè)試中
reduce比f(wàn)or循環(huán)更慢。
from functools import reduce
import time
def test_for(arr):
? ? if len(arr) <= 0:
? ? ? ? return 0
? ? out = arr[0]
? ? for i in arr[1:]:
? ? ? ? out += i
? ? return out
def test_reduce(arr):
? ? out = reduce(lambda x, y: x + y, arr)
? ? return out
a = [i for i in range(100000)]
t1 = time.perf_counter()
test_for(a)
t2 = time.perf_counter()
test_reduce(a)
t3 = time.perf_counter()
print('for循環(huán)耗時(shí):', (t2 - t1))
print('reduce耗時(shí):', (t3 - t2))輸出結(jié)果如下:
for循環(huán)耗時(shí): 0.009323899999999996
reduce耗時(shí): 0.018477400000000005
因此,如果對(duì)性能要求苛刻,建議不用reduce, 如果希望代碼更優(yōu)雅而不在意耗時(shí),可以用reduce。
到此這篇關(guān)于Python中reduce函數(shù)詳解的文章就介紹到這了,更多相關(guān)Python reduce函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?BeautifulSoup4實(shí)現(xiàn)數(shù)據(jù)解析與提取
Beautiful?Soup是一個(gè)Python的庫(kù),用于解析HTML和XML文檔,提供了方便的數(shù)據(jù)提取和操作功能,下面小編就來(lái)和大家詳細(xì)聊聊如何利用BeautifulSoup4實(shí)現(xiàn)數(shù)據(jù)解析與提取吧2023-10-10
python自動(dòng)重試第三方包retrying模塊的方法
retrying是一個(gè)python的重試包,可以用來(lái)自動(dòng)重試一些可能運(yùn)行失敗的程序段。這篇文章主要介紹了python自動(dòng)重試第三方包retrying的方法,需要的朋友參考下吧2018-04-04
Python可變參數(shù)會(huì)自動(dòng)填充前面的默認(rèn)同名參數(shù)實(shí)例
今天小編就為大家分享一篇Python可變參數(shù)會(huì)自動(dòng)填充前面的默認(rèn)同名參數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
使用Python生成隨機(jī)圖片驗(yàn)證碼的代碼詳解
當(dāng)我們?cè)趯?xiě)一個(gè)Web項(xiàng)目的時(shí)候一般要寫(xiě)登錄操作,而為了安全起見(jiàn),現(xiàn)在的登錄功能都會(huì)加上輸入圖片驗(yàn)證碼這一功能,所以本文就給大家介紹一下如何使用Python生成隨機(jī)圖片驗(yàn)證碼,需要的朋友可以參考下2023-07-07
Python3交互式shell ipython3安裝及使用詳解
這篇文章主要介紹了Python3交互式shell ipython3安裝及使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

