質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

608閲覧

1つ飛ばしでリストを平均化する方法

runrun5

総合スコア21

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/10/18 02:39

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2018/10/18 02:50

「1つ飛ばしでリストを平均化する」が正しくないタイトルだと思います。「2つずつの平均値のリストにする」などのほうが良いと思います。
hayataka2049

2018/10/18 03:50

リストの長さが奇数のとき、どう取り扱いましょうか
guest

回答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
tiitoi

総合スコア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
mather

総合スコア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分割する

https://www.python.ambitious-engineer.com/archives/1843

投稿2018/10/20 02:45

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問