Python標準庫:內建函式max(iterable, *[, key, default])說明
max(arg1,arg2,*args[,key])
本函式是迭代物件iterable進行比較,找出最大值返回。當key引數不為空時,就以key的函式物件為判斷的標準。
例子:
#max() array1 = range(10) array2 = range(0,20,3) print('max(array1)=',max(array1)) print('max(array2)=',max(array2)) print('max(array1,)=',max(array1,key=lambda x: x > 3) ) print(max(1,2)) print(max('ah','bf',key=lambda x: x[1])) print(max(array1,array2,key=lambda x: x[1])) def comparator(x): return x[2] print(max('ah2','bf3',key=comparator))
結果輸出如下:
max(array1)= 9 max(array2)= 18 max(array1,)= 4 2 ah range(0,3) bf3
補充知識:python之lambda表示式 : 對於python中max函式的key引數的理解與使用
新版很6,預覽效果和實際顯示不同,程式碼塊那裡顯示成html格式的我表示十分無語。將就看吧。
之前在看別人程式碼的時候看到了這樣的用法:
return max(self._children.items(),
key=lambda act_node: act_node[1].get_value(c_puct))
表示對這個key值十分不解,然後上網一搜。哦!參考資料
lambda表示式:
其實lambda是一個匿名函式,我們通常叫它lambda表示式,lambda存在意義就是對簡單函式的簡潔表示。
比如我們想實現這樣的函式:
def func(arg):
return arg + 1
為了使程式碼更簡潔,lambda登場,把上面的函式變形成:
lambda arg : arg + 1
所以,lambda a : b,實際上就是:lambda是一個輸入值為a,返回值為b的函式。
max函式中的lambda表示式:
現在回到我們的max函式中,就十分容易理解了:
函式形式:max( x,key=lambda a : b ) # x可以是任何數值,可以有多個x值
這個函式的意思是:我們先把x值帶入lambda函式轉換成b值,然後再將b值進行比較。
上程式碼:
haha0=max('az','za',key=lambda a: a[0]) haha1=max('az',key=lambda a: a[1]) haha2=max(range(10),key=lambda a:a>3) print(haha0) #輸出za print(haha1) #輸出az print(haha2) #輸出4
以haha0為例子:我們傳入az,za,為了方便解釋稱之為虛擬比較,但是因為我們引入了lambda表示式,所以,我們實際上比較的是,az中的第一位a和za中第一位的z,由ascii碼錶可以知道a是小於z的,所以在這裡最大的是z,那麼我們返回的就是z的虛擬比較變數,也就是本來的"za"。
haha2的用法十分少見,實際上比較的是
F F F T T T T T T T ( False 和 True )
T是肯定比F大的,但是一堆True哪裡能互相比較大小呢,所以就輸出第一個True值的虛擬比較變數,也就是4啦。
max中帶有lambda的這個寫法的意義在於程式碼變得更簡潔。
假如我們有一個字典,裡面記錄著人名和相應年齡,現在我們想要在裡面篩選出年齡最大的那個人的一條字典記錄。
x={"老王" :18,"小李":99} haha3=max(x.items(),key=lambda a: a[1]) print(haha3) #輸出('小李',99)
要注意使用字典的話一定要x.items(),不能直接輸入x值,達不到我們想要的效果。
其實我們大可不必這麼寫,直接從字典中提取出年齡列表進行比較:
x={"老王" :18,"小李":99} y=[] for name,age in x.items(): y.append(age) haha4=max(y) print(haha4)
只是這樣寫是比較麻煩以及浪費記憶體的不是麼?我想這就是max函式中設定lambda表示式的意義。
以上這篇Python標準庫:內建函式max(iterable,*[,key,default])說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。