Python的化簡(jiǎn)函數(shù)reduce()詳解
一、前言
官方解釋如下:
Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). The left argument, x, is the accumulated value and the right argument, y, is the update value from the sequence. If the optional initializer is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty. If initializer is not given and sequence contains only one item, the first item is returned.
格式:
creduce (func, seq[, init()])
reduce()函數(shù)即為化簡(jiǎn)函數(shù),它的執(zhí)行過程為:每一次迭代,都將上一次的迭代結(jié)果(注:第一次為init元素,如果沒有指定 init 則為 seq 的第一個(gè)元素)與下一個(gè)元素一同傳入二元func函數(shù)中去執(zhí)行。在reduce()函數(shù)中,init 是可選的,如果指定,則作為第一次迭代的第一個(gè)元素使用,如果沒有指定,就取 seq 中的第一個(gè)元素。
二、舉例
有一個(gè)序列集合,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],統(tǒng)計(jì)這個(gè)集合所有鍵的重復(fù)個(gè)數(shù),例如 1 出現(xiàn)了兩次,2 出現(xiàn)了兩次等。
大致的思路就是用字典存儲(chǔ),元素就是字典的 key,出現(xiàn)的次數(shù)就是字典的 value。
方法依然很多第一種:for 循環(huán)判斷
def statistics(lst):
dic = {}
for k in lst:
if not k in dic:
dic[k] = 1
else:
dic[k] +=1
return dic
lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print(statistics(lst)) 第二種:比較取巧的,先把列表用set方式去重,然后用列表的count方法。
def statistics2(lst):
m = set(lst)
dic = {}
for x in m:
dic[x] = lst.count(x)
return dic
lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print statistics2(lst) 第三種:用reduce方式
def statistics(dic,k):
if not k in dic:
dic[k] = 1
else:
dic[k] +=1
return dic
lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print reduce(statistics,lst,{})
#提供第三個(gè)參數(shù),第一次,初始字典為空,作為statistics的第一個(gè)參數(shù),然后遍歷lst,作為第二個(gè)參數(shù),然后將返回的字典集合作為下一次的第一個(gè)參數(shù)
或者
d = {}
d.extend(lst)
print reduce(statistics,d)
#不提供第三個(gè)參數(shù),但是要在保證集合的第一個(gè)元素是一個(gè)字典對(duì)象,作為statistics的第一個(gè)參數(shù),遍歷集合依次作為第二個(gè)參數(shù) 通過上面的例子發(fā)現(xiàn),凡是要對(duì)一個(gè)集合進(jìn)行操作的,并且要有一個(gè)統(tǒng)計(jì)結(jié)果的,能夠用循環(huán)或者遞歸方式解決的問題,一般情況下都可以用reduce方式實(shí)現(xiàn)。
到此這篇關(guān)于Python的化簡(jiǎn)函數(shù)reduce()詳解的文章就介紹到這了,更多相關(guān)Python的reduce()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用pandas處理CSV文件的實(shí)例講解
今天小編就為大家分享一篇Python使用pandas處理CSV文件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python實(shí)現(xiàn)根據(jù)日期獲取當(dāng)天凌晨時(shí)間戳的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)根據(jù)日期獲取當(dāng)天凌晨時(shí)間戳的方法,涉及Python針對(duì)日期與時(shí)間戳的相關(guān)轉(zhuǎn)換、運(yùn)算等操作技巧,需要的朋友可以參考下2019-04-04
從源碼到Docker全方位解析Python項(xiàng)目打包完整指南
在實(shí)際開發(fā)中,將Python項(xiàng)目打包成可部署的格式是一個(gè)至關(guān)重要的環(huán)節(jié),本文將全面介紹Python項(xiàng)目的各種打包方式,從基礎(chǔ)的分發(fā)打包到現(xiàn)代化的Docker容器化部署,希望對(duì)大家有所幫助2025-11-11
如何配置關(guān)聯(lián)Python 解釋器 Anaconda的教程(圖解)
這篇文章主要介紹了如何配置關(guān)聯(lián)Python 解釋器 Anaconda的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)火鍋工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Python如何實(shí)現(xiàn)拆分?jǐn)?shù)據(jù)集
這篇文章主要介紹了Python如何實(shí)現(xiàn)拆分?jǐn)?shù)據(jù)集問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

