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