如何找到压缩列表的元素,它具有最大的成对元素划分值?

时间:2016-04-13 12:46:46

标签: python arrays list knapsack-problem

大家好! 我遇到了这样的问题: 我从两个单独的列表中创建了压缩列表,我输入了

if __name__ == "__main__":
    data = list(map(int, sys.stdin.read().split()))
    n, capacity = data[0:2]
    values = data[2:(2 * n + 2):2]
    weights = data[3:(2 * n + 2):2]
    ziplist = list(zip(values,weights))
    opt_value = get_optimal_value(capacity, weights, values)

所以,当我输入

3 40
20 40
50 60
70 80

我有这样的清单

[(20, 40), (50, 60), (70, 80)]

现在,我需要了解这个压缩列表的元素具有每对的最大分割值。

m = list(x/y for x,y in ziplist) 

结果是:

[0.5, 0.8333333333333334, 0.875]

所以,很明显,我需要使用最后一对。但是我应该如何正确编码呢?我想避免以某种方式使用额外的列表。一般来说,我需要找到压缩列表的索引 - >然后从这个元素中获取值权重。所以,我的最终输出是80。

另外,我认为,我可能会走错路 - 因为实际上,我试图解决分数背包问题,所以我试图找到具有最佳比例的元素' s重量和价值。

1 个答案:

答案 0 :(得分:1)

要获取数字列表中最大元素的索引,您可以应用以下

argmax = max(enumerate(list_of_numbers), key=lambda x: x[1])[0]

这样做是将您的数字列表转换为(索引,值)对的元组列表,然后选择第二个值为maximal的对。然后它从该对(索引)获取第一个值并将其存储在变量argmax