在嵌套列表中,查找列表的值总和最大

时间:2018-11-11 03:39:34

标签: python list

我嵌套了列表,我试图找到一种更好的方法来找到具有最大值总和的列表。

下面是我的嵌套列表:

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 :(得分:4)

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]

答案 1 :(得分:2)

这是使用max和自定义函数的一种方式:

from operator import itemgetter

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

[[2, 5000], [3, 4000]]

答案 2 :(得分:2)

使用总和作为关键字对元素进行排序:

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

这是发布数据的最快解决方案。

答案 3 :(得分:1)

一种使用方式:

max(nums, key=lambda x:sum(list(zip(*x))[1]))
#[[2, 5000], [3, 4000]]

答案 4 :(得分:0)

超人的答案的变体:

print max(nums, key=lambda l: sum(l[0] + l[1]))