2
counts = misc. array

    for i in counts:
        if i < "(sum of the two integers next to i)/4"
            return -1

私がやろうとしているのは、リスト内の 2 つの隣人の平均の半分未満のすべての値を -1 に設定することです。つまり、リスト [10., 20., 10., 25., 30.] の場合、i=3 の場合、10 が (20+25)/4 より小さいかどうかを確認したいので、45/4 > 10 です。次に、10 を -1 に設定します。次に、リスト内のすべての値 >= 0 をフィルター処理します。

このプロセスは最初の値では機能しないため i+1 で開始し、最後の値では機能しないため -1 で終了する必要があるため、これはさらに複雑になります。どんな助けでも大歓迎です。

4

4 に答える 4

1

この回答からスライディングウィンドウジェネレーターを借りて、次のように使用できます。

out = [y if y >= (x+z)/4. else -1 for x,y,z in window(l, 3)]

あなたのリストはどこにlありますか。

これにより、最初と最後の要素が切り取られます。必要に応じて、それらとは異なること(たとえば、-1に設定)を行うのは簡単です。

于 2013-03-16T19:05:45.770 に答える
0

そのように:

result = [(x+1 if counts[x] > counts[x-1]/counts[x+1]/4 else -1) for x in range(len(counts[1:-1]))]

-xはcountsのidexです->forx in range(len(counts [1:-1])
- x+1counts[0]とcount[-1]が出ていることがわかっているので、結果を得るにはそれを調整する必要があります。
-if count[x] > counts[x-1]/counts[x+1]/4 else -1テスト、結果がTrueの場合は結果を返します。それ以外の場合は-1 に
注意してください。これは> 0、必要な値とは逆です 。最初と最後の値は関係ありません。上記のように、リストのコピーを使用することを お勧めします。スレッド-安全な
for x in range(len(counts[1:-1]))

counts[1:-1]

これは機能するはずです。カウントのインデックスごとに有効な結果(!=-1)と無効な結果のリストが表示されます。(== -1)

問題は、その結果でさらに何ができるかということです。

たとえば、次のようにテストできます:(結果として調整された xに注意してください)

 ['N/A'] + [(x if x!= -1 else False) for x in result] + ['N/A']

これにより、カウントの鏡像が得られ、結果はFalseまたはTrueになります。

于 2013-03-16T19:16:43.270 に答える
0

これはあなたが望むことをしますか(値がリストにあると仮定してdata)?

filtered = [data[i] for i in range(1,len(data)-1) if data[i] >= (data[i+1]+data[i-1])/4]
于 2013-03-16T19:05:46.347 に答える
0

私はあまりエレガントに見えない解決策を持っていますが、私は正しくて理解できると信じています。フィルタリングが含まれているため、-1が許可された値である場合にも機能します。

3つの変数(a、b、i)と3つのフラグ変数(fa、fb、fi)を使用して、値を結果セットに含める必要があるかどうかを示します。

def test(lst):
    a, fa, b, fb, res  = None, False, None, False, []
    for i in lst:
        if a is not None:
            fi = b < (a + i)/4
        else:
            fi = True
        if fa:
            res.append(a)
        a, fa = b, fb
        b, fb = i, fi
    if fa:
        res.append(a)
    res.append(b)
    return res

print(test([10., 20., 10., 25., 30.]))
=> [10.0, 20.0, 25.0, 30.0]
于 2013-03-16T19:41:55.757 に答える