我正在尝试为小数点knapsack problem编写不同的实现。根据各个相应元素的比例或基于第三个列表的Python中的排序2列表
为此,我有2个数组:
- 值
- 重量
元素值[n]的对应于元件的权重[N]。因此,我们可以计算value_per_unit为:
for I in range(values):
value_per_unit.append(values[I]/weights[I])
value_per_unit.sort()
我现在根据value_per_unit阵列所需要的2门阵列(值和权重)要排序
例如: 如果
- 值= [60,100,120]
- 权重= [20,50,30]
然后
values_per_unit = [3.0,2.0,4.0]
等values_per_unit_sorted将为[2.0,3.0,4.0]
我所需要的值和权重阵列成为:
- values_sorted = [100,60,120]
- weights_sorted = [50,20,30]
有一种方法来实现这一使用简单lambda函数?
我仍然可以做这样的事情,但似乎非常低效的每次我需要访问的元素:
weights[(value_per_unit_sorted.index(max(value_per_unit_sorted)))]
这是一个很小的问题,但是你用这个解决方案重新计算所有的比率,OP现在已经用粗体突出显示它应该根据value_per_unit数组排序*,我相当肯定的意思是使用“数组”(列表)并且不重新计算值。好的回答虽然:) –
@Tom然后可以使用第二个解决方案,OP可以跳过构建比率列表的第一位。 –
我同意这可能是明智的,但OP没有要求跳过构建比率的步骤;完全有可能他可能需要这个'list'作为别的东西,所以想要一个避免重新计算的解决方案。 –