0

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

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

该列表将始终进行排序。我想为这些值分配权重,以便权重仅在值 0 和 1 之间。最大值的权重为 1,即在此示例中,5 的权重为 1。

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

4

2 回答 2

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]).

于 2013-05-15T16:24:27.047 回答
0
def makeWeightedList(list_):
    max_ = max(list_)
    newList = list(map(lambda value: value / max_, list_))
    return newList

顺便说一句,即使列表未排序,这也有效。如果你真的可以依赖列表总是被排序(按升序(或非降序)顺序),最大值将始终是最后一个元素,所以第二行可以是:

max_ = list_[-1]

这将有更好的表现。

于 2013-05-15T16:25:50.343 回答