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

ところで、これはリストがソートされていなくても機能します。リストが常に (昇順 (または非降順) で) 並べ替えられていることに本当に依存できる場合、最大値は常に最後の要素になるため、2 行目は次のようになります。

max_ = list_[-1]

パフォーマンスが向上します。

于 2013-05-15T16:25:50.343 に答える