Получить максимальное значение и индекс максимального значения из последнего элемента во вложенных списках - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть список вложенных списков:

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 ]

4 голосов
/ 03 ноября 2019

Основываясь на моем первом ответе и других ответах ниже:

  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)
    
3 голосов
/ 03 ноября 2019

Попробуйте использовать следующий код:

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

Вывод:

[7, [0, 2]]
1 голос
/ 03 ноября 2019

Постарайтесь сделать ваше решение читабельным. Вместо умного однострочного кода легче понять больше кода с ясными именами переменных.

Сначала я вычислил бы максимум, а на втором шаге нашел бы индексы для этого максимума.

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]
1 голос
/ 03 ноября 2019

Проще говоря, получите максимум, затем создайте список индексов:

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]]
1 голос
/ 03 ноября 2019

Вы также можете попробовать это:

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

Вывод:

[7, [0, 2]]
1 голос
/ 03 ноября 2019

Добавление к ответу @ U10-Forward,

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