在Python中,我有一個列表,例如:從整數列表更改爲0和1之間的權重?
a = [1, 2, 3, 4, 5]
名單將始終進行排序。我想分配權重值,使得僅重值在0和1之間去的最大值將有重量1,即在這個例子中,5將有重物1
然而,1不會有體重0(0是特殊的,不包括在內)。我希望所有其他權重都是最大數量的某個小數值。我不確定解決這個問題的最好方法是什麼。
在Python中,我有一個列表,例如:從整數列表更改爲0和1之間的權重?
a = [1, 2, 3, 4, 5]
名單將始終進行排序。我想分配權重值,使得僅重值在0和1之間去的最大值將有重量1,即在這個例子中,5將有重物1
然而,1不會有體重0(0是特殊的,不包括在內)。我希望所有其他權重都是最大數量的某個小數值。我不確定解決這個問題的最好方法是什麼。
先找出最大;因爲你的數據是排序的,這將是最後一個值;然後只需通過該值除以休息:
from __future__ import division
maxval = a[-1]
weights = [elem/maxval for elem in a]
演示:
>>> maxval = a[-1]
>>> [elem/maxval for elem in a]
[0.2, 0.4, 0.6, 0.8, 1.0]
的from __future__ import division
進口,確保我們使用浮點除法,而不是整數除法。另一種方法是使用maxval = float(a[-1])
。
def makeWeightedList(list_):
max_ = max(list_)
newList = list(map(lambda value: value/max_, list_))
return newList
順便說一句,這工作,即使列表不排序。如果你真的可以依靠總是被排序的名單(按升序(或不降序)),最大永遠是最後一個元素,所以第二行可改爲:
max_ = list_[-1]
這將有更好的性能。
輸入*排序*,所以使用'max()'是矯枉過正;它必須遍歷'list_'中的所有值,而根據定義,最大值是最後一個元素。 –
的確,現在我意識到了。期望你的列表總是被排序,這有點奇怪。 – Tespa42
爲什麼這很奇怪?使用「bisect」模塊,您可以在插入O(log N)時間時保持列表排序。這使得按排序順序保持列表*容易*。 –
非常感謝你......這工作完美。 – cooper