2016-07-29 56 views
3

內子列表項目的最大最佳方法我在格式多維列表:找到列表

list = [[1, 2, 3], [2, 4, 2], [0, 1, 1]] 

我如何獲得所有子列表的第三值的最大值。在僞代碼:

max(list[0][2], list[1][2], list[2][2]) 

我知道這可以通過遍歷列表來完成,並提取第三值到一個新的列表,然後簡單地進行max(list),但我不知道這是否可以使用Lambda完成或列表理解?

+0

'MAX(LIS,鍵=拉姆達L:M [-1])'或'MAX(LIS, key = lambda m:m [-1])[ - 1]' –

+1

@AvinashRaj第一個將返回帶有最大值的列表,而不是最大值本身。 –

+0

ya,第一個將返回最後一個元素的列表項 –

回答

4

只需使用max與發電機的表達:

>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]] 
>>> max(l[2] for l in lst) 
3 

此外,不命名你的變量list,你正在遮蔽這個類型。

+0

爲什麼downvote?如果有任何錯誤,請幫助我改進我的答案。 –

+0

這應該是公認的答案,因爲它精確而優雅地解決了所描述的問題。 – jbndlr

4

使用zip函數獲取列的列表中,然後用一個簡單的索引,以獲得預期的列:

>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]] 
>>> 
>>> max(zip(*lst)[-1]) # in python 3.x max(list(zip(*lst))[-1]) 
3 

相互替代性和更Python的方法是通過一個key功能max得到最大項目基於按鍵功能。在這種情況下,你可以根據當時預期的指數,以獲得最大的項目使用itemgetter(-1)因爲max()功能從列表(子列表)返回整個項目就可以通過索引獲得預期的項目:

>>> from operator import itemgetter 
>>> max(lst, key=itemgetter(-1))[-1] 
3 

或多個功能:

>>> key_func = itemgetter(-1) 
>>> key_func(max(lst, key=key_func)) 
3 
+2

請注意'zip(...)[ - 1]'只能在Python 2.x中工作,然後會比其他。 –

+0

@tobias_k是剛剛修復。感謝評論! – Kasramvd

1

在列表上應用max將返回最大列表,這不是您想要的。事實上,你可以使用列表理解來提取第三個元素,然後對理解適用max

>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]] 
>>> max([x[2] for x in lst]) 
3