在python中,我有一个列表,例如:
a = [1, 2, 3, 4, 5]
列表将始终排序。我想为这些值分配权重,使得权重仅在值0和1之间。最大值将具有权重1,即在该示例中,5将具有权重1.
然而,1不会有权重0(0是特殊的,不包括在内)。我希望所有其他权重都是最大数字的某个小数值。我不确定解决这个问题的最佳方法是什么。
答案 0 :(得分:9)
首先找到最大值;由于您的数据已排序,这将是最后一个值;然后简单地将其余部分除以该值:
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])
。
答案 1 :(得分:0)
def makeWeightedList(list_):
max_ = max(list_)
newList = list(map(lambda value: value / max_, list_))
return newList
顺便说一下,即使列表没有排序也行。如果你真的可以依赖列表总是被排序(按升序(或非降序)顺序),则最大值始终是最后一个元素,因此第二行可以是:
max_ = list_[-1]
会有更好的表现。