1.filter
功能:filter主要作用是過濾掉序列中不符合函數條件的元素,當序列中要刪、減元素時,可以使用filter函數。
格式:fliter(function,sequence)
function可以是匿名函數或者自定義函數,它可以對后面的sequence序列的每個元素判定是否符合條件,返回True或者False,從而留下True的元素;sequence可以是列表、元組或者字符串。
注意:迭代器需要進行列表轉換
#匿名函數
import random
allNum = []
for i in range(9):
allNum.append(random.randint(1,20))
print(allNum)
print(list(filter(lambda x:x%3,allNum)))
#輸出:
#[8, 8, 9, 5, 4, 11, 19, 12, 1]
#[8, 8, 5, 4, 11, 19, 1]
#自定義函數
import random
def fun(x):
return x%2
allNum = []
for i in range(9):
allNum.append(random.randint(1,20))
print(allNum)
print(list(filter(fun,allNum)))
#輸出:
#[12, 16, 6, 10, 7, 4, 4, 10, 17]
#[7, 17]
2.map
功能:map主要作用是求一個序列或者多個序列進行函數映射之后的值。
格式:map(function,iterable1,iterable2)
function中參數值可以是一個,也可以是多個;后面的iterable代表function運算中的參數值,有幾個參數值就傳入幾個iterable。
注意:1.迭代器需要進行列表轉換 2.map中如果傳入的序列長度不一,會依據最短的序列計算
#匿名函數
x=[1,2,3,4]
y=[3,4,6,8,8] print(list(map(lambda x,y:(x*y)+2,x,y)))
#輸出:[5, 10, 20, 34]
#自定義函數
x=[1,2,3,4]
y=[3,4,6,8,8]
def fun(x,y):
return(x*y)+2
print(list(map(fun,x,y)))
#輸出:[5, 10, 20, 34]
3.reduce
功能:reduce是對一個序列進行壓縮運算,得到一個值。
格式:reduce(function,iterable)
function中必須傳入兩個參數,iterable可以是列表或者元組。
注意:reduce使用前需要導包 from functools import reduce,map和filter是內置函數,所以可以直接調用.
#匿名函數
from functools import reduce
x=[3,4,6,8,8] print(reduce(lambda x,y:(x+y),x))
#輸出:29
#自定義函數
from functools import reduce
x=[3,4,6,8,8] def fun(x,y): return x+y print(reduce(fun,x)) #輸出:29
計算原理:
先計算頭兩個元素:f(3,4),結果為7;
再把結果和第三個元素6計算:f(7,6),結果為13;
再把結果和第四個元素8計算:f(13,8),結果為21;
再把結果和第四個元素8計算:f(21,8),結果為29;
計算完畢,返回結果29。