2015-10-13 112 views
3

假設我有一個生成器gen,它生成一些列表。我想找到最長的列表。查找python生成器/列表中最大/最小的對象

我可以做

max((len(L) for L in gen)) 

這將讓我最長的列表的長度,但在這一點上的列表去時間的迷霧中。

或者我可以做

maxlength = 0 
for L in gen: 
    if len(L)>maxlength: 
     savelist = L 
     maxlength = len(L) 

但似乎應該避免for循環和if語句更Python的方式。

編輯只是一個評論,以幫助其他人誰可以搜索相關問題: 與min尋找最小對象可以等價完成,如果gen是一個列表,而不是同樣的方法會奏效。

回答

6

max只有一個關鍵字參數key,它將接受判斷哪個功能最大的功能。

result = max(gen, key=len) 

這將相當於是這樣的:

result = [el for _, el in sorted([len(el), el for el in gen])][-1] 
# note that `sorted` takes a `key` argument too! 
# # result = sorted(gen, key=len)[-1] 

但顯然更易於閱讀

+0

那真的是相當的? 'max'只需要遍歷一次,而不是對它進行排序。 – khelwood

+0

@ khelwood不,完全沒有,但它給出了相同的結果 –