今天天氣真的太適合睡覺了
床才是最邪惡的地方
但還是要繼續學習囉XD
filter(function, iterable)
function:filter()
可以創造一個數列,利用function判斷在iterable中每一個元素後,回傳一個布林值,若為True
,則會被存放在新的數列中。def function
,反而會造成filter()
的可讀性比較低,此時會選擇透過lambda
來協助我們val=[0,1,2,1,4,7,8,14,13,19,31,50]
fil_1=list(filter(lambda x: x%2 >0, val))
fil_2=list(filter(lambda x: 2**x >1024,fil_1))
print(fil_1) #output:[1, 1, 7, 13, 19, 31]
print(fil_2) #output:[13, 19, 31]
注意!對於python 3而言,filter()
是一個迭代對象(iterable),並非list或者container
reduce(function, iterable)
function:reduce()
顧名思義就是會將後面的迭代對象,逐項將iterable的每個元素利用function進行運算,簡化後回傳一個數值或答案在 Python 2 中,
reduce()
放在__builtin__ 中,有時被稱為foldLeft,它代表一種高度抽象化後的流程,基於讓reduce成為更舉體化的function,在Python 3中,reduce()
被移至funtools
module。
from functools import reduce
val=[1,1,2,92,20,19,31,100,14]
red_1=reduce(lambda x,y: x if x>y else y, val)
print(red_1) #output:100
#利用前兩項進行運算的結果,再跟第三項運算,直到每個元素都用完
#operation:
#val=[1,1,2,92,20,19,31,100,14] -> val=[1,2,92,20,19,31,100,14]
#-> val=[2,92,20,19,31,100,14] -> val=[92,20,19,31,100,14] ......
#-> val=[92,100,14] -> val=[100,14] -> val=[100]
red_2=reduce(lambda i,j: i*j, range(1,7))
print(fil_2) #output:720 #this method realizes factorial!
#operation:(((((1*2)*3)*4)*5)*6)
在網路上有看到一個動畫,可能會幫助大家理解reduce()
的法,也提程式的實踐碼!
from functools import reduce
total=reduce(lambda x,y : x+y, range(6)
print(total) #output: 15
map(function, iterable)
function:base=[2,3,2,6,3,1,3]
w=[4,1,5,2,4,7,3]
mapping_1=map(lambda x: 3*x+2, base)
print(list(mapping_1))
#output:[8, 11, 8, 20, 11, 5, 11]
mapping_2=map(lambda x,y: x+y, base, w)
print(list(mapping_2))
#output:[6, 4, 7, 8, 7, 8, 6]
好啦~禮拜六維持我們輕鬆的態度過吧!
明天會講一下怎麼用lambda
來幫助sorted()
肚子餓了~大家一起去吃飯吧XD
但今天還是想要給大家一個小小的練習
Jason某堂課的各項成績為score,而各項比重在weight,請計算Jason該科目學習成績囉!並嘗試給定他的GPA囉!(Hint: 90分以上:A+ ; 80~89分:A ; 70~79分:B ; 60~69分:C ; 60分以下:F)
weight=[0.01,0.3,0.4,0.2,0.09]
score=[100,70,85,60,100]