2016-07-29 53 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