4

数値の大きなリストがあり、それらのいずれかがほぼ等しいかどうかを確認したいと考えています。2 つの数値が "ほぼ等しい" (私の目的では) 場合、両方が互いに 10% 以内に収まります (次の 2 つの例を参照してください)。次に、それらをほぼ等しい数値の個別のリストに並べ替えたいと思います。

例 #1 5.0 と 5.5 を比較します。 5.5 +/- 10% = 4.95 から 6.05 (5.0 はこの範囲内) 5.0 +/- 10% = 4.50 から 5.50 (5.5 はこの範囲内) したがって、5.0 と 5.5 はほぼ等しい。

例 #2 5.0 と 5.6 を比較します。 5.6 +/- 10% = 5.04 から 6.16 (5.0 はこの範囲内) 5.0 +/- 10% = 4.50 から 5.50 (5.6 はこの範囲外) したがって、5.0 と 5.6ほぼ等しくありません。

私がする必要があることの要約: 入力 = {4.0, 4.1, 4.2, 4.0, 9.0, 9.4, 8.9, 4.3} 望ましい出力 = {4.0, 4.1, 4.2, 4.0, 4.3} および {9.0, 9.4, 8.9}

4

3 に答える 3

3
input_list = [4.0, 4.1, 4.2, 4.0, 9.0, 9.4, 8.9, 4.3]

results = {input_list[0]: [input_list[0]]}    # Start with first value
for value in input_list[1:]:         # loop through our entire list after first value
    hi = value * 1.1
    low = value * 0.9
    print("Value: {0}\tHi: {1}\tLow:{2}".format(value, hi, low))
    for existing in results:     # search through our result set
        found_similar = False
        if low < existing < hi:  # if we find a match
            results[existing].append(value)    # we add our value to the list for that set
            found_similar = True
            break
    if not found_similar:        # if we looped through our entire results without a match
        results[value] = [value] # Create a new entry in our results dictionary

for entry in results:
    print(results[entry])

あげる:

results = { 9.0: [9.0, 9.4, 8.9],
            4.0: [4.0, 4.1, 4.2, 4.0, 4.3] }

このコードは、リストの最初の値から開始し、その値の 10% 以内にあるすべての後続の値を見つけます。したがって、あなたの例では、4 から始まり、同様の値がすべて見つかります。10% 以内にない値は、新しい「セット」に追加されます。

9.0 に達すると、一致しないことがわかり、新しい結果セットがresults辞書に追加されます。キーは9.0. 9.4 を考慮すると、4.0 リストには一致が見つかりませんが、9.0 リストには一致が見つかります。したがって、この値を 2 番目の結果セットに追加します。

于 2013-05-07T23:34:10.987 に答える
-1

あなたはこれを行うことができます:

Input = {4.0, 4.1, 4.2, 4.0, 9.0, 9.4, 8.9, 4.3} 

wl=sorted(Input,reverse=True)
apr=.1
out={}
while wl:
    wn=wl.pop()
    out[wn]=[wn]
    while wl and wl[-1]<=wn*(1+apr):
        out[wn].append(wl.pop())

print [(k,out[k]) for k in sorted(out.keys())]

版画:

[(4.0, [4.0, 4.1, 4.2, 4.3]), (8.9, [8.9, 9.0, 9.4])]

コメントの例を試してください:

>>> Input = {1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0}

版画:

[(1.0, [1.0, 1.1]), (1.2, [1.2, 1.3]), (1.4, [1.4, 1.5]), (1.6, [1.6, 1.7]), (1.8, [1.8, 1.9]), (2.0, [2.0])]
于 2013-05-07T23:42:51.000 に答える