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

函數(shù)指針的六個(gè)常見(jiàn)應(yīng)用場(chǎng)景

TimSort:一個(gè)在標(biāo)準(zhǔn)函數(shù)庫(kù)中廣泛使用的排序算法
輕舟智航中高階智駕解決方案再獲項(xiàng)目定點(diǎn)
SUMIF函數(shù)與SUMIFS函數(shù)的區(qū)別
Python常用函數(shù)大全
使用Python搭建簡(jiǎn)易本地http服務(wù)器,升級(jí)WIPI模組

【每天學(xué)點(diǎn)AI】一個(gè)例子帶你了解Python裝飾器到底在干嘛!

量子計(jì)算場(chǎng)景實(shí)用秘籍:開(kāi)物SDK之“高階函數(shù)降階”

pytorch和python的關(guān)系是什么
python函數(shù)的萬(wàn)能參數(shù)

評(píng)論