从整数列表更改为0到1之间的权重?

时间:2013-05-15 16:20:00

标签: python list distribution

在python中,我有一个列表,例如:

a = [1, 2, 3, 4, 5]

列表将始终排序。我想为这些值分配权重,使得权重仅在值0和1之间。最大值将具有权重1,即在该示例中,5将具有权重1.

然而,1不会有权重0(0是特殊的,不包括在内)。我希望所有其他权重都是最大数字的某个小数值。我不确定解决这个问题的最佳方法是什么。

2 个答案:

答案 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]

会有更好的表现。

相关问题