本文結(jié)合各種實際的例子詳細(xì)講解了Python5個內(nèi)建高階函數(shù)的使用,能夠幫助理解Python的數(shù)據(jù)結(jié)構(gòu)和提高數(shù)據(jù)處理的效率,這5個函數(shù)分別是:
map
reduce
filter
sorted/sort
zip
一、map
1.1 語法
map函數(shù)的基本語法是map(func, seq),其含義指的是:對后面可迭代序列中的每個元素執(zhí)行前面的函數(shù)func的功能,最終獲取到一個新的序列。注意:
Python2中直接返回的是一個列表
Python3中返回的是一個可迭代器,如果想返回列表,可以使用list()進(jìn)行處理
help(map) # 查看幫助信息
1.2 demo
通過舉例說明map函數(shù)的使用方法
使用Python內(nèi)置函數(shù)
使用自定義函數(shù)
使用匿名函數(shù)lambda
使用匿名函數(shù)的時候可以有多個參數(shù)
二、reduce
2.1 語法
reduce函數(shù)的定義:
reduce(function, sequence [, initial] ) -> value
reduce依次從sequence中取一個元素,和上一次調(diào)用function的結(jié)果做參數(shù),再次調(diào)用function。
“
第一次調(diào)用function時,如果提供initial參數(shù),會以sequence中的第一個元素和initial作為參數(shù)調(diào)用function,否則會以序列sequence的第一個數(shù)
”
2.2 使用
Python3中已將reduce函數(shù)移到functools模塊中,需要先進(jìn)行導(dǎo)入:
from functools import reduce # 導(dǎo)入help(reduce) # 查看幫助文檔
上面的例子我們通過一個圖形來解釋說明:
2.3 demo
使用自定義函數(shù)
使用匿名函數(shù)lambda
image-20201024185550970
一個復(fù)雜的例子
具體過程為:
1.1*2+1=3 2.3*3+1=10# 第一個3為上面的結(jié)果3,第2個原始數(shù)據(jù)中的3 3.10*4+1=41
帶有初始值的例子
初始化值和序列中的第一個值執(zhí)行func函數(shù),將得到的結(jié)果作為下次的起始值
# 具體過程解釋為 1.6+1=7 2.7+2=9 3.9+3=12 4.12+4=16 5.16+5=21
三、filter
3.1 語法
filter()函數(shù)用于過濾序列,過濾掉不符合條件的那些元素,返回符合條件的元素組成新列表。
序列中的每個元素作為參數(shù)傳遞給函數(shù)進(jìn)行判斷,返回True或者False,最后將返回True的元素放到新列表中。
filter()語法如下:
filter(function, iterable) # 前者為函數(shù),后者為待執(zhí)行的序列
3.2 demo
help(filter) # 幫助文檔
使用自定義函數(shù)
返回10以內(nèi)的偶數(shù)
使用匿名函數(shù)lambda
對字符串的篩選
選擇符合指定要求的字符串
四、sorted
4.1 語法
sorted(iterable, key=None, reverse=False)
4.2 3個參數(shù)
sorted()接受3個參數(shù),返回的是一個排序后的列表
可迭代對象iterable
reverse=False,接受一個布爾值,選擇是否反轉(zhuǎn)排序結(jié)果,默認(rèn)是False
接受一個回調(diào)函數(shù)key=None,回調(diào)函數(shù)只能有一個參數(shù),根據(jù)函數(shù)的返回值進(jìn)行排序
4.3 demo
help(sorted) # 幫助文檔
默認(rèn)不反轉(zhuǎn)
對元組、range對象、字典的排序
4.4 結(jié)果反轉(zhuǎn)
結(jié)果反轉(zhuǎn)的意義就是將結(jié)果降序排列,因為原本默認(rèn)是升序的,使用的是reverse=True
4.5 理解key
key參數(shù)的作用是我們自定義一個函數(shù),然后通過將序列中的元素作用于函數(shù)之后再進(jìn)行排序
在這里我們使用絕對值函數(shù)
4.6 對比sort()
sort()方法只能對原列表list進(jìn)行排序,參數(shù)和sorted是相同的
結(jié)果是將原來的列表直接原地修改,而sorted 是生成新的列表,二者是不同的
五、zip
zip()是Python中一個非常重要的方法,能夠快速的實現(xiàn)很多功能。
5.1 語法
zip([iterable,...]) # iterable是一個或者多個可迭代器
函數(shù)執(zhí)行的結(jié)果在Python3中返回的是一個zip對象,如果需要展示成列表的形式,直接使用list方法展開;展開的結(jié)果是列表中嵌套元組的形式
在Python2中直接返回的是元組列表形式
help(zip) # 查看文檔
5.2 zip接受一個序列
zip中可以接受列表、元組、字符串等形式
zip接受空列表的形式,返回的仍空列表
5.3 zip接受多個序列
同時對不同類型的序列進(jìn)行合并
5.4 處理長度不同
當(dāng)多個序列同時存在,取長度最小的那個序列的長度
5.5 zip(*iterables)
我們一般認(rèn)為該方法是zip的反過程,是一個unzip的過程,舉例說明其使用:
5.6 復(fù)雜例子
下面看一個更為復(fù)雜的例子
這個例子的解釋為:
[x]是一個列表中含有列表,x本身就是一個列表
[x]*3結(jié)果為[x,x,x],實際上也是[[4,5,6],[4,5,6],[4,5,6]]
[*[x]*3]的結(jié)果則為[(4,4,4),(5,5,5),(6,6,6)]
5.7 zip運用
下面通過zip的實際例子來說明它的應(yīng)用:
列表求和
數(shù)據(jù)合并
字典的key-value轉(zhuǎn)換
for循環(huán)實現(xiàn):
使用zip實現(xiàn):
責(zé)任編輯:lq
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4307瀏覽量
62433 -
數(shù)據(jù)處理
+關(guān)注
關(guān)注
0文章
581瀏覽量
28530 -
python
+關(guān)注
關(guān)注
56文章
4782瀏覽量
84460
原文標(biāo)題:Python 高階函數(shù)使用總結(jié)
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論