[英]Optimal method to find the max of sublist items within list
我有一个格式的多维列表:
list = [[1, 2, 3], [2, 4, 2], [0, 1, 1]]
如何获取所有子列表的第三个值的最大值。 在伪代码中:
max(list[0][2], list[1][2], list[2][2])
我知道这可以通过迭代列表并将第三个值提取到一个新列表,然后简单地执行max(list)
来完成,但我想知道是否可以使用lambda或list comprehension来完成这个操作?
只需将max
与生成器表达式一起使用:
>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]]
>>> max(l[2] for l in lst)
3
另外,不要为变量list
命名,而是要隐藏类型。
使用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
在列表中应用max
将返回最大列表,这不是您想要的。 您确实可以使用列表推导来提取第三个元素,然后对该理解应用max
:
>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]]
>>> max([x[2] for x in lst])
3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.