2017-02-16 10 views
-3

私は平均して価格が一定の範囲内にとどまる期間を把握しようとしています。 (後方つもりはない)、それは> 14でどのくらいの平均の前に、9.9 - 例えばリストの平均時間を計算する方法

[10, 7.7, 9.5, 15, 8.8, 9.3, 7.7, 16] 

値が8の間にある場合:私の値があるとしましょうか?

9.5が1日に14回通過する。 3日で8.8。 2日で9.3。 1日で7.7。従って、平均は(1 + 3 + 2 + 1)/ 4 = 1.75日である。

私はその計算を行うプログラムを作成しようとしていますが、問題が発生しています。

コード:

list = [10, 7.7, 9.5, 15, 8.8, 9.3, 7.7, 16] 

def new_function() 
    for i in list: 

    while 8 < x < 9.99 (store index position as initial y); 

    when x becomes > 14 (take index position and subtract it from initial y to find length) 

    repeat for next i where 8 < x < 9.9 

average = sum(length)/len(length) 
print(average) 
+0

は、CSVファイル内のデータ(10行程度)のサンプルを提供することができ、次のようにまた、ループの周りに各カウンタに1を毎回追加しますか?要件を理解しやすくなり、推奨されるソリューションを検証するのに役立ちます。 – Apollo2020

+0

の数字は、リストに入力した値と非常によく似ています。私は物を簡素化するためにそれらの数字を使っただけです。 2列:日付と価格。何千ものデータ行。ご協力いただきありがとうございます –

答えて

0

始まるエントリが見つかったら、あなたが1 > 14に到達するまで、各エントリのリストにカウンターを保管してください。この時点で、見つかった値を合計に追加し、実行をリセットします。

data = [10, 7.7, 9.5, 15, 8.8, 9.3, 7.7, 16] 
run = [] 
total_days = 0 
total_entries = 0 

for value in data: 
    if value > 14: 
     total_days += sum(run) 
     total_entries += len(run) 
     run = [] 
    elif 8 < value < 9.99 or len(run): 
     run.append(0) 
    run = [value + 1 for value in run] 

print total_days/float(total_entries) 

があなたに与える:

1.75 
関連する問題