查找列表中子列表项最大值的最佳方法

时间:2016-07-29 09:51:08

标签: python arrays list list-comprehension

我有一个格式为多维的列表:

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

如何获取所有子列表的第三个值的最大值。在伪代码中:

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

我知道这可以通过迭代列表并将第三个值提取到一个新列表,然后简单地执行max(list)来完成,但我想知道是否可以使用lambda或list完成理解?

3 个答案:

答案 0 :(得分:7)

只需将max与生成器表达式一起使用:

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

另外,不要将变量命名为list,而是要隐藏类型。

答案 1 :(得分: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

另一种替代方案和更多pythonic方法是将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 :(得分:1)

在列表中应用max将返回最大列表,这不是您想要的。您确实可以使用列表推导来提取第三个元素,然后对该理解应用max

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