为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星coding 2021-08-14 17:09:58
我有嵌套列表,我试图找出更好的方法来查找列表具有最大值的总和。以下是我的嵌套列表: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)
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

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


from operator import itemgetter


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


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


查看完整回答
反对 回复 2021-08-14
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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]


查看完整回答
反对 回复 2021-08-14
?
慕斯709654

TA贡献1840条经验 获得超5个赞

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


max(DATA, key=lambda x:x[0][1] + x[1][1])

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

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


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信