本篇文章給大家?guī)砹岁P于python的相關知識,其中主要介紹了關于內(nèi)置函數(shù)的相關問題,主要見一下六個超好用的函數(shù),包括了Lambda、map、reduce、zip、filter、enumerate函數(shù),下面一起來看一下,希望對大家有幫助。
推薦學習:python視頻教程
Lambda 函數(shù)
Lambda
函數(shù)用于創(chuàng)建匿名函數(shù),即沒有名稱的函數(shù)。它只是一個表達式,函數(shù)體比def簡單很多。當我們需要創(chuàng)建一個函數(shù)來執(zhí)行單個操作并且可以在一行中編寫時,就可以用到匿名函數(shù)了。
lambda [arg1 [,arg2,.....argn]]:expression
lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。例如:
lambda x: x+2
如果我們也想像def定義的函數(shù)隨時調用,可以將lambda函數(shù)
分配給這樣的函數(shù)對象。
add2 = lambda x: x+2add2(10)
輸出結果:
利用Lambda
函數(shù),可以將代碼簡化很多,具體再舉個例子。
如上圖所示,結果列表newlist
是使用lambda函數(shù)用一行代碼生成的。
Map 函數(shù)
map()
函數(shù)會將一個函數(shù)映射到一個輸入列表的所有元素上。
map(function,iterable)
比如我們先創(chuàng)建了一個函數(shù)來返回一個大寫的輸入單詞,然后將此函數(shù)應有到列表colors
中的所有元素。
def makeupper(word): return word.upper()colors=['red','yellow','green','black']colors_uppercase=list(map(makeupper,colors))colors_uppercase
此外,我們還可以使用匿名函數(shù)lambda
來配合map函數(shù),這樣可以更加精簡。
colors=['red','yellow','green','black']colors_uppercase=list(map(lambda x: x.upper(),colors))colors_uppercase
如果我們不用Map函數(shù)的話,就需要使用for循環(huán)。
如上圖所示,在實際使用中Map函數(shù)會比for循環(huán)依次列表元素的方法快1.5倍。
Reduce函數(shù)
當需要對一個列表進行一些計算并返回結果時,reduce()
是個非常有用的函數(shù)。舉個例子,當需要計算一個整數(shù)列表所有元素的乘積時,即可使用reduce函數(shù)實現(xiàn)。[1]
它與函數(shù)的最大的區(qū)別就是,reduce()
里的映射函數(shù)(function)接收兩個參數(shù),而map接收一個參數(shù)。
reduce(function, iterable[, initializer])
接下來我們用實例來演示reduce()
的代碼執(zhí)行過程。
from functools import reducedef add(x, y) : # 兩數(shù)相加 return x + y numbers = [1,2,3,4,5]sum1 = reduce(add, numbers) # 計算列表和
得到結果sum1 = 15
我們會看到,reduce將一個相加函數(shù)add()
作用在一個列表[1,2,3,4,5]上,映射函數(shù)接收了兩個參數(shù),reduce()
把結果繼續(xù)和列表的下一個元素做累加計算。
此外,我們同樣可以使用匿名函數(shù)lambda
來配合reduce函數(shù),這樣可以更加精簡。
from functools import reducenumbers = [1,2,3,4,5]sum2 = reduce(lambda x, y: x+y, numbers)
得到輸出sum2= 15
,與之前結果保持一致。
需要注意:Python3.x開始
reduce()
已經(jīng)被移到functools模塊里[2],如果我們要使用,需要用from functools import reduce
導入.
enumerate 函數(shù)
enumerate()
函數(shù)用于將一個可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標,一般用在for循環(huán)當中。它的語法如下所示:
enumerate(iterable, start=0)
它的兩個參數(shù),一個是序列、迭代器或其他支持迭代對象;另一個是下標起始位置,默認情況從0開始,也可以自定義計數(shù)器的起始編號。
colors = ['red', 'yellow', 'green', 'black']result = enumerate(colors)
如果我們有一個存放colors的顏色列表,運行后就會得到一個enumerate(枚舉) 對象。它可以直接在for循環(huán)中使用,也可以轉換為列表,具體用法如下所示。
for count, element in result: print(f"迭代編號:{count},對應元素:{element}")
Zip 函數(shù)
zip()
函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表[3]。
我們還是用兩個列表作為例子演示:
colors = ['red', 'yellow', 'green', 'black']fruits = ['apple', 'pineapple', 'grapes', 'cherry']for item in zip(colors,fruits): print(item)
輸出結果:
當我們使用zip()
函數(shù)時,如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同。
prices =[100,50,120]for item in zip(colors,fruits,prices): print(item)
Filter 函數(shù)
filter()
函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表,其語法如下所示[4]。
filter(function, iterable)
比如舉個例子,我們可以先創(chuàng)建一個函數(shù)來檢查單詞是否為大寫,然后使用filter()
函數(shù)過濾出列表中的所有奇數(shù):
def is_odd(n): return n % 2 == 1old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] new_list = filter(is_odd, old_list)print(newlist)
輸出結果:
今天分享的這6個內(nèi)置函數(shù),在使用 Python 進行數(shù)據(jù)分析或者其他復雜的自動化任務時非常方便。
推薦學習:python視頻教程