我有一个格式为多维的列表:
list = [[1, 2, 3], [2, 4, 2], [0, 1, 1]]
如何获取所有子列表的第三个值的最大值。在伪代码中:
max(list[0][2], list[1][2], list[2][2])
我知道这可以通过迭代列表并将第三个值提取到一个新列表,然后简单地执行max(list)
来完成,但我想知道是否可以使用lambda或list完成理解?
答案 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