如何通过最后一行和列在列表列表中查找最大值

时间:2016-11-13 18:35:13

标签: python list

我有一个列表列表,需要找到最后一个列表中的最大值和每个列表的最后一个值

score_matrix = [[6, 1, 2], [1, 2, 3], [3, 4, 5]]

max_value, max_index = max((x, (i, j))
                              for i, row in enumerate(score_matrix)
                              for j, x in enumerate(row))

代码应该找到5作为最大值但是当前找到6。

1 个答案:

答案 0 :(得分:0)

如果您只想计算每行中的 last 值,请仅在生成器表达式中包含该值:

max_value, max_index = max((row[-1], (i, len(row) - 1))
                           for i, row in enumerate(score_matrix))

row[-1]获取给定行的最后一个值,len(row) - 1生成最后一个元素的索引。

如果您还需要最后一行,请在单独的序列中添加这些元素;您可以使用itertools.chain()组合两个生成器:

from itertools import chain
max_value, max_index = max(chain(
    ((row[-1], (i, len(row) - 1)) for i, row in enumerate(score_matrix)),
    ((c, (len(score_matrix) - 1, j)) for j, c in enumerate(score_matrix[-1]))
))

这包括最后一行中的那一列两次,但是对于一个额外的值,它不值得为最后一行切片。

演示:

>>> from itertools import chain
>>> score_matrix = [[6, 1, 2], [1, 2, 3], [3, 4, 5]]
>>> max(chain(
...         ((row[-1], (i, len(row) - 1)) for i, row in enumerate(score_matrix)),
...         ((c, (len(score_matrix) - 1, j)) for j, c in enumerate(score_matrix[-1]))
...     ))
(5, (2, 2))