Python 内建函数 max/min的高级用法
max/min 函數
Python 中的 max/min函數是用來獲取傳入參數的最大值或最小值的,其運行機制都一樣,所以這里主要描述 max 的運行機制以及使用方法。
最簡單的用法,就是直接傳入兩個要對比的元素,可以返回其兩個元素中的最大值。因為使用很簡單,這里不做過多介紹。
那么重點說一下這兩個內建函數的比較高級的用法, 就是直接傳入序列,會返回序列中的最大/最小值。
函數原型:max(iterable, key, default)
這是求迭代器的最大值,其中iterable 為迭代器,max會for i in … 遍歷一遍這個迭代器,然后將迭代器的每一個返回值當做參數傳給key=func 中的func(一般用lambda表達式定義) ,然后將func的執行結果傳給key,然后以key為標準進行大小的判斷。
注意,這里的重點是key,key 可以由一個lambda函數來表示,并通過 key 的不同, 最終計算出來的值也會不同。
如果覺得以上描述還是比較難懂,那么可以這樣理解:key是一個關鍵字,它告訴 max 應該通過什么因素去進行計算。
OK,話不多說,直接來看示例
示例
這里通過幾個簡單的示例代碼來進行說明:
v1 = {'name':'xiaoming','age':18} v2 = {'name':'zro','age':10} v3 = {'name':'april','age':30}b = [v1,v2,v3] print(max(b,key = lambda x:x['name']))print(max(b,key = lambda x:x['age']))輸出結果:
{'name': 'zro', 'age': 10} {'name': 'april', 'age': 30}解析:
第一句 print(max(b,key = lambda x:x[‘name’])),這里的 max 傳入的 key 是一個lambda語句,這句話的意思就是 要將字典中的‘name’作為對比的元素,然后會遍歷整個迭代器,并將 ‘name’元素取出來進行對比,所以最終輸出結果為:
因為三種字典中,’zro’才是最大的(通過對比字符串,從左至由對其 ASCII 碼進行比較)。
而第二句print(max(b,key = lambda x:x[‘age’])),原理和上面一樣,這是去字典中的‘age’來進行對比,所以最終輸出的結果就很明了了。
如果說上面的示例還是難理解,那么再來看一個相對簡單的示例:
a = [1,2,3,3,4,5,6,1,2,7,2,9,1,2] print(max(a,key = lambda x:a.count(x)))輸出結果為:2
解析:這里 a 是一個列表,max 函數指定的 key 是使用a 列表的 count()函數,count()函數是用于統計列表中某個元素的個數,那么這里的 max 計算出來的結果就是通過整理 a 列表中所有元素里面出現的個數最多的元素,所以輸出為2。
另外,上面的寫法可以更簡單一些:
其輸出結果是一樣的。
經過上面的說明,應該理解起來就比較容易了。那么下面的語句就會很容易看懂了。
x=[23,14323,462,3323,761] #將元素轉換成字符串后進行對比 print(max(x,key = str)) #返回轉換成字符串后最長的值 print(max(x,key = lambda item:len(str(item))))def myFun(item):return str(item) #使用自定義函數指定排序規則 print(max(x,key = myFun))value = ((8,9,10),(8,10,9),(8,9,11)) print(max(value)) #只比較下標為0和2的兩個元素 print(max(value,key = lambda item:(item[0],item[2])))輸出:
761 14323 761 (8, 10, 9) (8, 9, 11)參考文章:https://www.cnblogs.com/rendawei/p/7057010.html
https://blog.csdn.net/oh5W6HinUg43JvRhhB/article/details/78869541
總結
以上是生活随笔為你收集整理的Python 内建函数 max/min的高级用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《高效能人士的七个习惯》
- 下一篇: Python基本数据类型 set()