如何按重量对两个配对元素的列表进行排序?

时间:2016-04-14 08:59:00

标签: python algorithm sorting

我正在处理这样的问题:

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

所以,当我输入

3 40
20 40
50 60
70 80

我有这样的清单

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

我需要按“权重”的值对列表进行排序,其中权重为

elem1/elem2

在测试时,我做了这样的清单

m = list(x/y for x,y in ziplist)     
[0.5, 0.8333333333333334, 0.875]

我发现最后一个元素的权重最大,所以我需要将我的初始列表排序为:

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

我正在阅读关于使用键进行排序的内容,但我无法理解如何编写我的正确条件,类似的东西

 newlist = ziplist.sort(key=lambda m = x/y for x, y in ziplist m)

此外,我如何处理排序列表以从第一个索引获取elem2。所以,我有这样的排序列表:

[(70, 80), (50, 60), (20, 40)]
#code implementation 

a = 70 #output
b = 80 #output

1 个答案:

答案 0 :(得分:3)

sorted(l, key=lambda elem: elem[0] / elem[1], reverse=True)