2016-11-13 63 views
0

我有一个列表的列表,需要找到每个列表如何通过最后一排和列

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

+0

所以应该找中2,第3和5的最大(即每行的最后的值)? –

+0

它应该看2,3和5以及[3,4,5]之间的最大值并找出最大值。 –

+0

然后你需要做两个单独的测试;一列用于最后一列,另一列用于最后一列。 –

回答

0

如果你只是想每一行以统计最后值,仅包括在发电机的表达:

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)) 
+0

它也需要比较最后一个列表,所以它是每行最后一个值的最大值,也是列表中的最后一个列表 –

+0

@AlexanderClarke:在那里添加了。 –