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]))