【Python】最初の要素が同じタプルをリスト内でグループ化する方法
このチュートリアルでは、最初の要素が同じタプルをすべてグループ化するPythonプログラムを作成します。まず、具体的な入出力の例を見ながら、どのような処理を行うのかを確認しましょう。
入力例
[(1, 2, 3), (1, 4, 5), (3, 4, 1), (3, 4, 2)]
出力例
[(1, 2, 3, 4, 5), (3, 4, 1, 4, 2)]
ご覧のとおり、最初の要素が「1」である2つのタプルは1つにまとめられ、「3」で始まる2つのタプルも同様に統合されています。それでは、この問題を解くための手順を確認していきましょう。
解決の手順
- タプルのリストを初期化します。
- 結果を格納するための空の辞書を用意します。
- タプルのリストを順番に反復処理します。
- 各タプルの最初の要素が、すでに辞書のキーとして存在するかどうかを確認します。
- 存在する場合は、現在のタプルから最初の要素を除いた値を、既存の値に連結して追加します。
- 存在しない場合は、そのタプルを新しいエントリとして辞書に登録します。
- 最後に、辞書の値をリスト形式で出力します。
実装例
# リストの初期化
tuples = [(1, 2, 3), (1, 4, 5), (3, 4, 1), (3, 4, 2)]
# 空の辞書
result = {}
# タプルを反復処理
for sub_tuple in tuples:
# 最初の要素がresultに存在するかチェック
if sub_tuple[0] in result:
# 最初の要素を除いた値を既存の値に追加
result[sub_tuple[0]] = (*result[sub_tuple[0]], *sub_tuple[1:])
else:
# 新しいキーとしてタプルを登録
result[sub_tuple[0]] = sub_tuple
# 結果をリストとして表示
print(list(result.values()))
実行結果
上記のコードを実行すると、次の出力が得られます。
[(1, 2, 3, 4, 5), (3, 4, 1, 4, 2)]
別のアプローチ:defaultdictを使う方法
collectionsモジュールのdefaultdictを利用すると、キーの存在チェックを省略でき、コードをより簡潔に書くことができます。
from collections import defaultdict
tuples = [(1, 2, 3), (1, 4, 5), (3, 4, 1), (3, 4, 2)]
grouped = defaultdict(list)
for sub_tuple in tuples:
grouped[sub_tuple[0]].extend(sub_tuple[1:])
print([tuple([key] + values) for key, values in grouped.items()])
こちらのコードでも、先ほどと同じ結果が得られます。状況に応じて使い分けるとよいでしょう。
まとめ
今回は、辞書を活用して最初の要素が同じタプルをグループ化する方法を学びました。ほかにもさまざまな実装方法が考えられるので、ぜひ自分なりのアプローチを試してみてください。このチュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
Pythonでリストのインデックスを値とする辞書を作成する方法
この記事では、Pythonで頻繁に使われるコレクションの一つである「リスト」から辞書を作成する方法を解説します。リスト自体にはインデックスやキーが含まれていませんが、辞書ではすべての要素(値)に対してキーやインデックスを関連付ける必要があります。ここでは、リストの各要素を「値」として持ち、その位置(インデックス)を対応する値として格納する辞書の作り方を、2つの異なるアプローチで紹介します。enumerate関数を使う方法enumerate関数は、イテラブルなオブジェクトの各要素にカウンター(連番)を割り当ててくれる便利な組み込み関数です。この関数を対象のリストに適用し、forループと組み合わせ
-
Pythonで同じ先頭要素を持つタプルの値を合計する方法
タプル(tuple)はPythonのコレクション(配列)の一種で、順序は保持されるものの、後から変更することができないデータ構造です。複数のタプルを扱う際に、最初の要素が同じタプル同士について、2番目の要素を合算したいというケースがよくあります。本記事では、そのような場合に活用できる2つの方法を具体的なコード例とともに解説します。方法1:map関数とforループを組み合わせるまず、タプルで構成されたリストを用意します。次に、リストを辞書型に変換することで、タプルの各要素を「キー」と「値」のペアとして関連付けられるようにします。そのうえでforループを使い、各キーに対応する値を順次加算していきま