Во вложенном списке список поиска имеет наибольшую сумму сумм значений - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть вложенный список, и я пытаюсь найти лучший подход, чтобы найти список с наибольшей суммой значений.

Ниже мой вложенный список:

nums = [[[1, 3000], [1, 2000]],
        [[1, 3000], [2, 3000]],
        [[1, 3000], [3, 4000]],
        [[2, 5000], [1, 2000]],
        [[2, 5000], [2, 3000]],
        [[2, 5000], [3, 4000]],
        [[3, 4000], [1, 2000]],
        [[3, 4000], [2, 3000]],
        [[3, 4000], [3, 4000]]]

Желаемый вывод = [[2, 5000], [3, 4000]], так как сумма значений самая большая.

Мой подход:

largest = []
for i in range(len(nums)-1):
  if (nums[i][0][1] + nums[i][1][1]) > (nums[i+1][0][1] + nums[i+1][1][1]):
    largest.append(nums[i])
print(largest)

Ответы [ 5 ]

0 голосов
/ 11 ноября 2018

Вариант ответа трансчеловека:

print max(nums, key=lambda l: sum(l[0] + l[1]))
0 голосов
/ 11 ноября 2018

Сортировка элементов с использованием суммы в качестве ключа:

max(DATA, key=lambda x:x[0][1] + x[1][1])
#[[2, 5000], [3, 4000]]

Это самое быстрое решение для опубликованных данных.

0 голосов
/ 11 ноября 2018

Один из способов использования:

max(nums, key=lambda x:sum(list(zip(*x))[1]))
#[[2, 5000], [3, 4000]]
0 голосов
/ 11 ноября 2018

Вот один из способов использования max и пользовательской функции:

from operator import itemgetter

res = max(nums, key=lambda x: sum(map(itemgetter(1), x)))

[[2, 5000], [3, 4000]]
0 голосов
/ 11 ноября 2018
DATA = [
    [[1, 3000], [1, 2000]],
    [[1, 3000], [2, 3000]],
    [[1, 3000], [3, 4000]],
    [[2, 5000], [1, 2000]],
    [[2, 5000], [2, 3000]],
    [[2, 5000], [3, 4000]],
    [[3, 4000], [1, 2000]],
    [[3, 4000], [2, 3000]],
    [[3, 4000], [3, 4000]],
]

tups = [
    (sum(n for _, n in row), row)
    for row in DATA
]

mx = max(tups)
print(mx)                        # (9000, [[2, 5000], [3, 4000]])
print([xs[0] for xs in mx[1]])   # [2, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...