我正在嘗試爲小數點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'作爲別的東西,所以想要一個避免重新計算的解決方案。 –