Pythonで同じ先頭要素を持つタプルの値を合計する方法
タプル(tuple)はPythonのコレクション(配列)の一種で、順序は保持されるものの、後から変更することができないデータ構造です。複数のタプルを扱う際に、最初の要素が同じタプル同士について、2番目の要素を合算したいというケースがよくあります。本記事では、そのような場合に活用できる2つの方法を具体的なコード例とともに解説します。
方法1:map関数とforループを組み合わせる
まず、タプルで構成されたリストを用意します。次に、リストを辞書型に変換することで、タプルの各要素を「キー」と「値」のペアとして関連付けられるようにします。そのうえでforループを使い、各キーに対応する値を順次加算していきます。最後にmap関数を使えば、合計済みの値を持つタプルのリストとして結果を取得できます。
コード例
List = [(3,19),(7, 31), (7, 50), (1, 25.5), (1, 12)]
# リストを辞書に変換
tup = {i:0 for i, v in List}
for key, value in List:
tup[key] = tup[key]+value
# map関数で結果をリスト化
result = list(map(tuple, tup.items()))
print(result)上記のコードを実行すると、以下のような結果が得られます。
出力結果
[(3, 19), (7, 81), (1, 37.5)]
出力を見ると、先頭要素が「7」のタプル2つ(31と50)は81に、「1」のタプル2つ(25.5と12)は37.5にそれぞれまとめられていることがわかります。
方法2:collectionsモジュールのdefaultdictを使う
2つ目の方法では、collectionsモジュールが提供するdefaultdictメソッドを利用します。defaultdictは、存在しないキーにアクセスしたときにデフォルト値(ここではint型なので0)を自動的に設定してくれるため、初期化の手間が省けます。処理の流れ自体は方法1とほぼ同じですが、最後にmap関数を使わず、辞書のアイテムへ直接アクセスしてリストへ変換している点が異なります。
コード例
from collections import defaultdict # タプルのリスト List = [(3,19),(7, 31), (7, 50), (1, 25.5), (1, 12)] dict = defaultdict(int) for key, value in List: dict[key] = dict[key]+value # 結果の出力 print(list(dict.items()))
上記のコードを実行すると、以下のような結果が得られます。
出力結果
[(3, 19), (7, 81), (1, 37.5)]
まとめ
どちらの方法でも、最初の要素が共通するタプルの2番目の要素を効率よく集計できます。シンプルな辞書操作で完結させたい場合は方法1、より簡潔なコードで初期化を自動化したい場合は方法2のdefaultdictがおすすめです。用途や可読性の観点から、適切な方法を選択してください。
-
PythonでKより大きい最初の要素のインデックスを取得する方法
Pythonのリスト内の要素は、必ずしもソートされた順序で並んでいるとは限りません。また、特定の値よりも大きい値だけに関心があるケースも少なくありません。この記事では、リスト内でKより大きい値を持つ最初の要素のインデックスを取得する方法を、複数のアプローチから解説します。方法1:enumerate()とnext()を組み合わせるenumerate()関数を使うと、リスト内の各要素についてインデックスと値の両方を同時に取得できます。そこに「25より大きい」という条件を適用し、条件を満たす最初の要素だけを取り出します。next()関数がリストの各要素を順番に処理し、条件が成立した時点で結果を返しま
-
Pythonで同じ先頭要素を持つタプルの値を合計する方法
タプル(tuple)はPythonのコレクション(配列)の一種で、順序は保持されるものの、後から変更することができないデータ構造です。複数のタプルを扱う際に、最初の要素が同じタプル同士について、2番目の要素を合算したいというケースがよくあります。本記事では、そのような場合に活用できる2つの方法を具体的なコード例とともに解説します。方法1:map関数とforループを組み合わせるまず、タプルで構成されたリストを用意します。次に、リストを辞書型に変換することで、タプルの各要素を「キー」と「値」のペアとして関連付けられるようにします。そのうえでforループを使い、各キーに対応する値を順次加算していきま