python初心者なのですが
list = [0,1,2,3,4,5,6,7,8,9]
このようなリストがあったときこのリストを
list = [0.5,2.5,4.5,6.5,8.5]
のように2つずつ平均化するプログラムが思いつきません。
簡単な質問かもしれませんが教えていただけるとありがたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/18 03:50
回答3件
0
ベストアンサー
2通りのやり方を記載しました。
python
1lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 3# 1つずらすようにしてループを回す 4means = [] 5for a, b in zip(lst[::2], lst[1::2]): 6 print(a, b) 7 mean = (a + b) / 2 8 means.append(mean) 9print(means) 10 11# 1度に2つずつ値を取り出して、ループする。 12itr = iter(lst) 13means = [(v + next(itr)) / 2 for v in itr] 14print(means)
0 1 2 3 4 5 6 7 8 9 [0.5, 2.5, 4.5, 6.5, 8.5] [0.5, 2.5, 4.5, 6.5, 8.5]
投稿2018/10/18 02:48
編集2018/10/18 02:48総合スコア21956
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
あえて愚直な方法で。
python
1def make_pair_avg_list(target): 2 n = len(target) 3 result = [] 4 for i in range(0,n): 5 if i % 2 == 0: 6 if i + 1 < n: 7 result.append( (target[i] + target[i+1]) / 2) 8 else: 9 result.append(target[i]) 10 else: 11 continue 12 return result
投稿2018/10/18 02:59
編集2018/10/18 04:49総合スコア6753
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
から [0.5, 2.5, 4.5, 6.5, 8.5]
を得る方法を探ります。
まずは、すなおに index を 0, 2, 4, .. と 2 ステップごとに変化させ
data[x] と data[x + + 1] の平均を作っていきます。
[(data[x] + data[x+1]) / 2 for x in range(0, len(data), 2)]
次に data を 2 個ずつに分割したリストを得てから、その結果の各要素を平均値に置き換えるという方針で考えていきます。
分割したリストwを取得する方法はいろいろあります。
list(zip(data[::2], data[1::2]))
list(zip(*[iter(data)]*2))
[data[x:x + 2] for x in range(0, 9, 2)]
from more_itertools import chunked
list(chunked(data, 2))
どれをえらんでもよいですが、以下では chunked(data, 2)を使って、平均値に置き換えていきます。
[(a + b) / 2 for a, b in chunked(data, 2)]
[sum(x) / 2 for x in chunked(data, 2)]
data の長さが 偶数でなかったときは
data.append(data[-1] として、最後の数字を繰り返すことで 偶数個にすればよいです。
参考情報
- リストをn個ずつのサブリストに分割 (Python)
http://iogi.hatenablog.com/entry/split-list-into-sublist
- Pythonのリストを決まったサイズで分割するときはmore-itertoolsのchunkedを使う
http://ariarijp.hatenablog.com/entry/2017/11/02/114539
- リストをN分割する
投稿2018/10/20 02:45
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。