teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

余ったものも平均を求める処理を追加

2021/02/17 10:49

投稿

lehshell
lehshell

スコア1180

answer CHANGED
@@ -21,4 +21,11 @@
21
21
  ```Python
22
22
  def n_mean(ls, n):
23
23
  return [sum(ls[i:i+n])/n for i in range(0,len(ls),n)]
24
+ ```
25
+ n 個に満たない余ったものを余った個数で平均して
26
+ n_mean([1,2,3,4,5,6,7,8,9,10], 3) を [2.0, 5.0, 8.0, 10.0] としたい場合は
27
+ ```Python
28
+ def n_mean(ls, n):
29
+ ln = len(ls)
30
+ return [sum(ls[i:i+n])/(n if i+n <= ln else ln-i) for i in range(0, ln, n)]
24
31
  ```

2

コードを戻して処理の差分を追記

2021/02/17 10:49

投稿

lehshell
lehshell

スコア1180

answer CHANGED
@@ -1,8 +1,7 @@
1
1
  素直に実装すると
2
2
  ```Python
3
3
  def n_mean(ls, n):
4
- #return [sum(ls[i-n+1:i+1])/n for i in range(n-1,len(ls),n)]
4
+ return [sum(ls[i-n+1:i+1])/n for i in range(n-1,len(ls),n)]
5
- return [sum(ls[i:i+n])/n for i in range(0,len(ls),n)] # ppaul さんのご指摘を反映
6
5
 
7
6
  n_mean([1,2,3,4,5,6,7,8,9], 3) # [2.0, 5.0, 8.0]
8
7
 
@@ -10,4 +9,16 @@
10
9
  amp_list = n_mean(amp_list, 3)
11
10
  plt.scatter(time_list,amp_list)
12
11
  plt.show()
12
+ ```
13
+ n 個の平均を取る仕様が曖昧なのでどちらがいいかわかりませんが n 個ずつにした余りを無視して
14
+ n_mean([1,2,3,4,5,6,7,8,9,10], 3) を [2.0, 5.0, 8.0] としたい場合は
15
+ ```Python
16
+ def n_mean(ls, n):
17
+ return [sum(ls[i-n+1:i+1])/n for i in range(n-1,len(ls),n)]
18
+ ```
19
+ n 個に満たないものも n で割った平均値にして
20
+ n_mean([1,2,3,4,5,6,7,8,9,10], 3) を [2.0, 5.0, 8.0, 3.333...] としたい場合は
21
+ ```Python
22
+ def n_mean(ls, n):
23
+ return [sum(ls[i:i+n])/n for i in range(0,len(ls),n)]
13
24
  ```

1

ppaul さんのご指摘を反映

2021/02/17 10:28

投稿

lehshell
lehshell

スコア1180

answer CHANGED
@@ -1,7 +1,8 @@
1
1
  素直に実装すると
2
2
  ```Python
3
3
  def n_mean(ls, n):
4
- return [sum(ls[i-n+1:i+1])/n for i in range(n-1,len(ls),n)]
4
+ #return [sum(ls[i-n+1:i+1])/n for i in range(n-1,len(ls),n)]
5
+ return [sum(ls[i:i+n])/n for i in range(0,len(ls),n)] # ppaul さんのご指摘を反映
5
6
 
6
7
  n_mean([1,2,3,4,5,6,7,8,9], 3) # [2.0, 5.0, 8.0]
7
8