2016-10-02 12 views
-4
list [] 
list contains [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] 

リストから10個の数字の平均を得るにはどうすればよいですか?リスト内の10個の数字の平均をどのようにすればよいですか

+3

あなたのコードが何をすべきか説明してください。入力と予想される出力は何ですか?あなたのコードで今起こっていることは、あなたがそれが動作していないと信じるように導きます。最終的に、より良い[mcve]をまとめて、それに応じて質問を編集する方法をお読みください。 – idjaw

+0

「平均10個」とは「平均1〜10」を意味し、次に「11-20」などを指します。 –

+0

10個の数字の組み合わせはすべて平均30億を生成します! – VPfB

答えて

1

以下はサンプルコードです。あなたのケースではstep、すなわち10の数字のリストを繰り返します。ステップの間の要素のaverageを計算します。

>>> my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] 
>>> step = 10 
>>> for i, _ in enumerate(my_list[::step]): 
...  sub_list = my_list[i*10:] if (i+1)*10 > len(my_list) else my_list[i*10:(i+1)*10] # Condition if the len(my_list) % step != 0 
...  print sum(sub_list)/float(len(sub_list)) # Dividing by float' to get decimal value as average (Not needed in Python 3) 
... 
5.5 
15.5 
25.5 
+0

すごい!!どうもありがとうございます。 –

+0

@MoinuddinQuadri変数 'num'は使われていないようです – VPfB

+0

@VPfB:更新済み –

0

平均がサブリストを作成せずに計算することができる。

testdata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
     19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] 

LEN = 10 

def avg(data): 
    datasum = cnt = 0 
    for num in data: 
     datasum += num 
     cnt += 1 
     if cnt == LEN: 
      yield datasum/LEN 
      datasum = cnt = 0 
    if cnt: 
     yield datasum/cnt 

print(list(avg(testdata))) 
# [5.5, 15.5, 25.5] 

サブリストを有する代替実装:

def avg(data): 
    for i in range((len(data) + LEN - 1) // LEN): 
     sublist = data[i*LEN:(i+1)*LEN] 
     yield sum(sublist)/len(sublist) 

注:INT/INTは、このあるのpython3コード浮く。 Python2ではint/intはintです。

関連する問題