在 python 中,我有一个列表,例如:
a = [1, 2, 3, 4, 5]
该列表将始终进行排序。我想为这些值分配权重,以便权重仅在值 0 和 1 之间。最大值的权重为 1,即在此示例中,5 的权重为 1。
但是,1 的权重不会为 0(0 是特殊的,不包括在内)。我希望所有其他权重都是最大数的某个分数。我不确定解决这个问题的最佳方法是什么。
在 python 中,我有一个列表,例如:
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]
这将有更好的表现。