我嵌套了列表,我试图找到一种更好的方法来找到具有最大值总和的列表。
下面是我的嵌套列表:
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)
答案 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]))