2016-12-11 21 views
0

入力のリストが与えられています。リストの最後のxは、テストに使用する数値です。だから、最初のn-x要素は、xの要素を使ってテストしたい要素です。例えばwhileループがPythonを終了しない

test_case = [0.18677649597722776, 0.21992417009282958, 0.21001370207789635, 0.2576939078119566, -0.26790678064174844, 0.23723906040549575, 0.23796810219833633, 0.12311570730540798, 0.291222989748139, -0.46589179980005796, -0.5679935337540711, -0.541967302717414, 0.2797199715268191, -0.0462338707795437, 0.3352382038488532, -0.6395453091791992, -0.7116194799285872, -0.6827853559995019, 0.4131897184013285, 0.07125041194386302, 0.47179441094288416, -0.5670171363969451, -0.6493889334859158, -0.6214861349381114, 0.6332084272531783, 0.2946607775328391, 0.7252115985158697, -0.48494480580385074, -0.5584250339723696, -0.5329318548632481, 0, 1, 0, 5, 5, 5] 

私は最初の30個の数字の上に私のテストの一部として使用したい最後の6つの数字。私はtest_case[31] < 3、私にtest_case[0]を与えて、そうでない場合は私に-999を与えるように30の数字を介して循環したい。これはtest_case[36] < 3まで繰り返され、私にtest_case[5]を与えます。その後、test_case[31]を返して、test_case[6]とループで再び使用する必要があります。

私がtest_case[30]にいると、私はそれを止めたいです。

は、ここで私が持っているものだ。私は一般の関数を作るしようとしている

def test_inputs(x, comp_size): 
    counts = x[-comp_size:] 
    inputs = x[:(len(x)-comp_size+1)] 
    counts_pos = 0 
    inputs_pos = 0 
    while inputs_pos < (len(x)-comp_size+1): 
     if counts_pos == 6: 
      counts_pos = 0 
     if counts[counts_pos] < 3: 
      x.append(inputs[inputs_pos]) 
      print inputs_pos 
      print counts_pos 
      inputs_pos += 1 
      counts_pos += 1 
     else: 
      x.append(-999) 
      print inputs_pos 
      print counts_pos 
      inputs_pos += 1 
      counts_pos += 1 

。この場合、実行することができます:

test_inputs(test_case, 6) 

しかし、これはinputs_pos == 31で停止しません。私は印刷のステートメントを入れて、それはちょうど行くように見えます。

フィルターを使用すると簡単な方法はありますか?

+0

ループ条件はlen(x)に依存しますが、len(x)が増加し続けるように、ループを介して繰り返しごとに1つの項目をxに追加しています。 – jarmod

+0

それは、ありがとうございます! – WhitneyChia

答えて

3

は、私はあなたがしたいことを正しく理解午前:

from itertools import cycle 
def test_inputs(x, comp_size): 
    return [(input if count<3 else -999) for (input,count) 
      in zip(x[:-comp_size], cycle(x[-comp_size:]))] 

あなたはx.extend代わりのreturnを使用してインプレース修正の動作を復元することができます。拡張呼び出しの前にスライスが実行されるので、正確に同じ項目が生成されます。それでも、(inputs,counts)タプルを渡すのが簡単な場合は、このように1つのリストにデータ型を混ぜることは一般的には良い考えではないと思います。

0

各繰り返しでlen(x)が評価されるため、ループは停止しません。あなたのサイクルでは、count_posをインクリメントし、新しい要素をxに追加します。

+0

ありがとう...愚かな間違い。 – WhitneyChia

関連する問題