Python??reduce()函數(shù)的用法示例代碼
Python reduce()函數(shù)的用法
reduce()函數(shù)也是Python內(nèi)置的一個高階函數(shù)。reduce()函數(shù)接收的參數(shù)和 map()類似,一個函數(shù) f,一個list,但行為和 map()不同,reduce()傳入的函數(shù) f 必須接收兩個參數(shù),reduce()對list的每個元素反復(fù)調(diào)用函數(shù)f,并返回最終結(jié)果值。
reduce()函數(shù)會對參數(shù)序列中的元素進行累積
語法結(jié)構(gòu)
reduce(function, iterable[, initializer])
參數(shù)說明
- function: 函數(shù),有兩個參數(shù)
- iterable: 可迭代對象
- initializer: 初始參數(shù)(可選)
返回值
返回函數(shù)計算結(jié)果
綜上所述,reduce()函數(shù)將一個數(shù)據(jù)集合中的所有數(shù)據(jù)進行下列操作,先從數(shù)據(jù)集合中取出2個元素執(zhí)行指定函數(shù)function,并將輸出結(jié)果與第3個元素傳入function函數(shù),輸出結(jié)果再與第4個元素傳入function函數(shù)進行計算,以此類推,直到列表每個元素都取完進行累積,最終返回計算結(jié)果
提示Tips
在python3中,內(nèi)置函數(shù)中已經(jīng)沒有reduce()函數(shù)了,它現(xiàn)在被放置在functools模塊里,如果想要使用它,則需要通過引入functools模塊來調(diào)用reduce()函數(shù)
from functools import reduce
示例1
from functools import reduce # 兩數(shù)相加 def add(x,y): return x + y # 計算1 + 2 + 3 + ... + 100的和 sum1 = reduce(add, range(1, 101)) print(sum1) # 5050 # 計算列表和:1+2+3+4+5 # 使用lambda匿名函數(shù)+reduce()函數(shù) sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5]) print(sum2) # 15 sum3 = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5], 6) # 21 = 6 + 1 + 2 + 3 + 4 + 5 print(sum3) # 21
示例2
from functools import reduce lst = [1,2,3,4,5] # 120 = 1 * 2 * 3 * 4 * 5 print(reduce(lambda x,y:x*y,lst)) # 120
示例3
from functools import reduce str1="abcdefg" # gfedcba print(reduce(lambda x,y:y+x, str1))
示例4
from functools import reduce sentences = ['Hello World!! hello Andy'] # 統(tǒng)計字符串'Hello'出現(xiàn)的次數(shù) word_count =reduce(lambda a,x:a+x.count("Hello"), sentences, 0) print(word_count) # 1
【Python基礎(chǔ)】reduce函數(shù)詳解
reduce
函數(shù)原本在python2
中也是個內(nèi)置函數(shù),不過在python3
中被移到functools
模塊中。
reduce
函數(shù)先從列表(或序列)中取出2
個元素執(zhí)行指定函數(shù),并將輸出結(jié)果與第3
個元素傳入函數(shù),輸出結(jié)果再與第4
個元素傳入函數(shù),…,以此類推,直到列表每個元素都取完。
1 reduce用法
對列表元素求和,如果不用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
,那么代碼將非常簡潔:
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)性能對比
與內(nèi)置函數(shù)map
和filter
不一樣的是,在性能方面,reduce
相比較for
循環(huán)來說沒有優(yōu)勢,甚至在實際測試中
reduce
比for
循環(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)耗時:', (t2 - t1)) print('reduce耗時:', (t3 - t2))
輸出結(jié)果如下:
for循環(huán)耗時: 0.009323899999999996
reduce耗時: 0.018477400000000005
因此,如果對性能要求苛刻,建議不用reduce
, 如果希望代碼更優(yōu)雅而不在意耗時,可以用reduce
。
到此這篇關(guān)于Python reduce()函數(shù)的用法的文章就介紹到這了,更多相關(guān)Python reduce()函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python中的線程進行網(wǎng)絡(luò)編程的入門教程
這篇文章主要介紹了使用Python中的線程進行網(wǎng)絡(luò)編程的入門教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04pytorch在fintune時將sequential中的層輸出方法,以vgg為例
今天小編就為大家分享一篇pytorch在fintune時將sequential中的層輸出方法,以vgg為例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08如何遠程使用服務(wù)器上的Jupyter notebook
這篇文章主要介紹了如何遠程使用服務(wù)器上的Jupyter notebook,主要是在服務(wù)器端執(zhí)行操作,需要特別注意為了防止遠程中斷,使用掛起操作,即執(zhí)行nohup jupyter notebook,需要的朋友可以參考下2023-02-02Python如何優(yōu)雅刪除字符列表空字符及None元素
這篇文章主要介紹了Python如何優(yōu)雅刪除字符列表空字符及None元素,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06使用python對excle和json互相轉(zhuǎn)換的示例
今天小編就為大家分享一篇使用python對excle和json互相轉(zhuǎn)換的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10python中l(wèi)ambda與def用法對比實例分析
這篇文章主要介紹了python中l(wèi)ambda與def用法對比,實例分析了lambda與def的區(qū)別與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04