Python
 Computer >> コンピューター >  >> プログラミング >> Python

【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()])

こちらのコードでも、先ほどと同じ結果が得られます。状況に応じて使い分けるとよいでしょう。

まとめ

今回は、辞書を活用して最初の要素が同じタプルをグループ化する方法を学びました。ほかにもさまざまな実装方法が考えられるので、ぜひ自分なりのアプローチを試してみてください。このチュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。

  1. Pythonでリストのインデックスを値とする辞書を作成する方法

    この記事では、Pythonで頻繁に使われるコレクションの一つである「リスト」から辞書を作成する方法を解説します。リスト自体にはインデックスやキーが含まれていませんが、辞書ではすべての要素(値)に対してキーやインデックスを関連付ける必要があります。ここでは、リストの各要素を「値」として持ち、その位置(インデックス)を対応する値として格納する辞書の作り方を、2つの異なるアプローチで紹介します。enumerate関数を使う方法enumerate関数は、イテラブルなオブジェクトの各要素にカウンター(連番)を割り当ててくれる便利な組み込み関数です。この関数を対象のリストに適用し、forループと組み合わせ

  2. Pythonで同じ先頭要素を持つタプルの値を合計する方法

    タプル(tuple)はPythonのコレクション(配列)の一種で、順序は保持されるものの、後から変更することができないデータ構造です。複数のタプルを扱う際に、最初の要素が同じタプル同士について、2番目の要素を合算したいというケースがよくあります。本記事では、そのような場合に活用できる2つの方法を具体的なコード例とともに解説します。方法1:map関数とforループを組み合わせるまず、タプルで構成されたリストを用意します。次に、リストを辞書型に変換することで、タプルの各要素を「キー」と「値」のペアとして関連付けられるようにします。そのうえでforループを使い、各キーに対応する値を順次加算していきま