从嵌套列表中的最后一项获取最大值和最大值索引

时间:2019-11-03 10:26:55

标签: python python-3.x list nested-lists

我有一个嵌套列表的列表:

scoring_matrix = [[1, 2, 7], [3, 5, 2], [2, 2, 7]]

我正在尝试从嵌套列表中的所有最后一项中获取最大值,以及具有该最大值的嵌套列表的索引/索引。所有嵌套列表的长度相等。

在此示例中:

item     output (value, index)
2        [7, [0, 2]]

我还需要获得最后一个嵌套列表的最高价值和索引/索引,这是我得出的:

max_last_list = [index for index, item in enumerate(scoring_matrix[-1]) if item == max(scoring_matrix[-1])]

我正在尝试重写此行以使它能解决我的问题,但我找不到解决方法。

该解决方案无法使用非内置模块

6 个答案:

答案 0 :(得分:4)

根据我的第一个答案以及下面的其他答案:

  1. 计算末端的最大值并在子列表中找到

    # Find the max of the ends value
    max_end = max(map(lambda x: x[-1], scoring_matrix))
    # Find the sublist whe the last if the overall max
    indexes = [index for index, item in enumerate(scoring_matrix) if item[-1] == max_end]
    # Group result
    result = [max_end, indexes]
    
    print(result)
    
  2. 将两端保持在一起并继续工作

    # Put all ends value in a list
    ends = list(zip(*scoring_matrix))[2]
    # Iterate over the ends to find the overall max
    indexes = [i for i, v in enumerate(ends) if v == max(ends)]
    # Group result
    result = [max(ends), indexes]
    
    print(result)
    

答案 1 :(得分:3)

尝试使用以下代码:

l = list(zip(*scoring_matrix))[2]
print([max(l), [i for i, v in enumerate(l) if v == max(l)]])

输出:

[7, [0, 2]]

答案 2 :(得分:1)

添加到@ U10-Forward的答案中,

l = list(zip(*scoring_matrix))[2]
print([max(l), [i for i, v in enumerate(l) if v == max(l)]])

答案 3 :(得分:1)

您也可以尝试以下方法:

maxi = max(sum(scoring_matrix,[]))
res = [maxi,[n for n,i in enumerate(scoring_matrix) if maxi in i]]

输出:

[7, [0, 2]]

答案 4 :(得分:1)

保持简单,获取最大值,然后创建索引列表:

scoring_matrix = [[1, 2, 7], [3, 5, 2], [2, 2, 7]]

m = max(sublist[2] for sublist in scoring_matrix)
out = [m, [i for i, sub in enumerate(scoring_matrix) if sub[2] == m]]

print(out)
#[7, [0, 2]]

答案 5 :(得分:1)

尝试使您的解决方案可读。代替聪明的单行代码,通常更容易理解带有清晰变量名的更多代码。

我将首先计算最大值,然后在第二步中找到该最大值的索引。

scoring_max = max(l[-1] for l in scoring_matrix)
indices = [i for i, sublist in enumerate(scoring_matrix) if sublist[-1] == scoring_max]
return [scoring_max, indices]

第二个问题的解决方案非常相似。

last_sublist = scoring_matrix[-1]
list_max = max(last_sublist)
indices = [i for i, val in enumerate(last_sublist) if val == list_max]