從集合中查找最值得方法——max(),min(),nlargest(),nsmallest()


從集合中查找最值得方法有很多,常用的方法有max(),min(),nlargest(),nsmallest()等。

一、max()和min()

1.1 入門用法

直接使用max(),min(),返回可迭代對象中的最大值和最小值。

1 a = [1, 5, 2, 1, 9, 1, 5, 10]
2 print(max(a))
3 print(min(a))
4 
5 #運行結果如下
6 10
7 1

1.2 進階用法

我們以max()為例來分析。max(interable,key=none),即max()函數中第一個參數需要提供一個可迭代的查找對象。key值為空時,僅返回一個最大值。當key值非空時,max()函數就以key為標准來判斷,通常可結合匿名函數使用。

1 a = [14, -57, 21, 10, 19, 12, 25, 10]
2 print(max(a, key=lambda x:str(x))) #以對應的字符串做判斷標准
3 print(max(a, key=lambda x:len(str(x)))) #以對應的字符串的長度做判斷標准
4 print(max(a, key=lambda x:abs(x)))  #以絕對值大小做判斷標准
5 
6 #運行結果如下
7 25
8 -57
9 -57

min()的用法與max()同理,不再舉例

1.3 高階用法

高階用法可與zip()結合,查找字典中value最大的item項。比如,有一組商品,商品名和價格的映射關系體現在字典中,如下:

prices={
    "裝載機":768,
    "推土機":248,
    "平地機":131,
    "橄欖車":375,
    "反鏟":636
}

這里需要注意的是在進行字典操作時,默認是對key進行操作,而不是value(其中一個很重要的原因是key具有唯一性,而value沒有)。所以,我們要使用zip方法將字典的鍵值反轉過來,在進行排序查找。

min_price = min(zip(prices.values(),prices.keys()))
print(min_price)

max_price = max(zip(prices.values(),prices.keys()))
print(max_price)


#運行結果如下
(131, '平地機')
(768, '裝載機')

注意:

zip()是創建了一個迭代器,它只能使用一次,所以,如下方法是會報錯的

price_and_name = zip(prices.values(),prices.keys())

print(max(price_and_name))
print(min(price_and_name))

二、nlargest()和nsmallest()

前面提到的max()和min()只能返回一項值,而heapq模塊下的nlargest()和nsmallest(),可以返回最大或最小的多個值。

 1 import heapq
 2 
 3 nums = [12,548,31,4,546,58,46,1,8,42,3,68]
 4 
 5 print(heapq.nlargest(3,nums))
 6 print(heapq.nsmallest(4,nums))
 7 
 8 
 9 #運行結果如下
10 [548, 546, 68]
11 [1, 3, 4, 8]

可以看到nlargest()和nsmallest()可以返回指定數目的最值。與max()和min()一樣,nlargest()和nsmallest()也可以加上key作為判斷條件,從而用於更復雜的數據結構。

 1 import heapq
 2 
 3 students = [
 4     {"name":"張三", "age":19, "tuition":6000},
 5     {"name":"李四", "age":23, "tuition":4500},
 6     {"name":"王五", "age":18, "tuition":8000},
 7     {"name":"趙六", "age":29, "tuition":7000},
 8     {"name":"錢七", "age":27, "tuition":5500}
 9 ]
10 
11 print(heapq.nlargest(3,students,key=lambda x:x["tuition"]))
12 print(heapq.nsmallest(3,students,key=lambda y:y["age"]))
13 
14 
15 #運行結果如下:
16 [{'name': '王五', 'age': 18, 'tuition': 8000}, {'name': '趙六', 'age': 29, 'tuition': 7000}, {'name': '張三', 'age': 19, 'tuition': 6000}]
17 [{'name': '王五', 'age': 18, 'tuition': 8000}, {'name': '張三', 'age': 19, 'tuition': 6000}, {'name': '李四', 'age': 23, 'tuition': 4500}]

 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM