Python 在嵌套列表中,“查找列表”的值之和最大

Python 在嵌套列表中,“查找列表”的值之和最大,python,list,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, 4

我有一个嵌套的列表,我正试图找到更好的方法来找到列表有最大的值和

下面是我的嵌套列表:

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)
一种方法是使用:

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

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

from operator import itemgetter

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

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

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

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

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

Transhuman回答的变体:

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

我喜欢这个想法,但是使用
sum
不需要创建列表。您可以使用
itertools.islice
对迭代器进行切片,或者自己明确定义迭代器。例如:
max(nums,key=lambda x:sum(next)(iter(islice(zip(*x),1,2 '))
。没有创建列表。不能将生成器表达式馈送到
max
?创建列表似乎没有必要。@jpp当然可以(其他答案涵盖了该领域)。这个答案说明了一个不同的想法:创建一个可排序/可最大化的数据结构,将总和与输入行配对,这在许多情况下都是一种方便的技术。当然,我的意思是你只需要将
tups=[…]
更改为
tups=(…)
@FMc这真的很独特,获得[2,3]的捷径是什么。我的目标是在找到最大的和之后,得到关键点这是一个非常好的方法,但仍然没有让我的头脑清醒过来,关于参数“1”itemgetter()takes@mtkilic,参数
1
仅表示两个内部列表中每个列表的和索引1(即第二个值,因为Python是0索引的),对于每个外部子列表,我希望可以接受多个答案。谢谢你的建议
print max(nums, key=lambda l: sum(l[0] + l[1]))