2016-11-13 66 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:在那裏添加了。 –