Python 如何找到压缩列表中的一个元素,其成对元素的除法值最大?

Python 如何找到压缩列表中的一个元素,其成对元素的除法值最大?,python,arrays,list,knapsack-problem,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,we

各位!! 我遇到了这样的问题: 我从两个分开的列表中创建了压缩列表,我正在输入

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)]
现在,我需要了解这个压缩列表的with元素每对的除法有一个最大值

m = list(x/y for x,y in ziplist) 
结果是:

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


另外,我认为,我可能会走错方向,因为实际上,我试图解决分数背包问题,所以我试图找到权重和值的最佳比例的元素

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

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

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

您可以执行
max([x/y代表x,y在ziplist中])
您是如何将整数除法生成浮点结果的?@ScottHunter这是Python 3中除法的行为(
/
运算符将生成整数结果).很好,正是我想回答的。但是我会直接写
。。。枚举(x/y代表x,y在ziplist中).
避免在内存中创建新的命名列表,但直接使用未命名的生成器。