Pythonでタプルのリストから共通要素(交差)を求める方法
タプルレコード内のデータの共通部分(交差)を求めたい場合、リスト内包表記を使うと簡潔に実装できます。
リスト内包表記は、リストを反復処理しながら各要素に対して操作を行うための短縮記法であり、Pythonらしい可読性の高いコードを書くのに役立ちます。
なお、リストには整数・浮動小数点数・文字列など、異なるデータ型の値(異種混合データ)をまとめて格納することが可能です。
「タプルのリスト」とは、複数のタプルを1つのリストで囲んだ構造のことです。以下に具体的な実装例を示します。
サンプルコード
my_list_1 = [('Hi', 1), ('there', 11), ('Will', 56)]
my_list_2 = [('Hi', 1), ('are', 7), ('you', 10)]
print("最初のリスト:")
print(my_list_1)
print("2番目のリスト:")
print(my_list_2)
my_result = [elem_1 for elem_1 in my_list_1
for elem_2 in my_list_2 if elem_1 == elem_2]
print("タプルのリストの交差(共通要素):")
print(my_result)実行結果
最初のリスト:
[('Hi', 1), ('there', 11), ('Will', 56)]
2番目のリスト:
[('Hi', 1), ('are', 7), ('you', 10)]
タプルのリストの交差(共通要素):
[('Hi', 1)]コードの解説
- まず、2つのタプルのリストを定義し、それぞれコンソールに表示します。
- リスト内包表記により、両方のリストを二重に反復処理し、対応する要素同士を比較します。
- 要素が完全に一致した場合のみ、その要素が結果の変数
my_resultに追加されます。 - 一致しない要素は無視されます。
- 最終的に、共通するタプルだけがコンソールに出力されます。
補足:setを使ったより効率的な方法
上記の方法は直感的で分かりやすい一方、二重ループのため計算量は O(n×m) となります。データ件数が多い場合は、タプルはハッシュ可能(イミュータブル)であることを利用して、set 型の積集合演算を使うと O(n+m) で高速に処理できます。
my_result = list(set(my_list_1) & set(my_list_2))
print(my_result) # [('Hi', 1)]用途やデータサイズに応じて、リスト内包表記とset演算を使い分けるとよいでしょう。
-
なぜPythonはリスト内のリストではなく「リスト内のタプル」を返すのか?その理由を解説
Pythonでデータベースを操作したり、ライブラリからデータを取得したりすると、「リストの中にタプルが入った構造」が返ってくることがよくあります。「なぜ普通のリストではなく、わざわざタプルなのか?」と疑問に思ったことはありませんか?この記事では、その理由を分かりやすく解説します。 1. 返却されたデータは「変更しない」ことが前提だから 最大の理由は、Pythonが返却するデータはミュータブル(変更可能)にしないことを期待している点にあります。タプルはイミュータブル(不変)なデータ型であり、一度作成すると内容を書き換えることができません。 関数やライブラリがデータを返すとき、それはあくまで「読
-
Pythonでリストを出力する方法|インデックスの基本から実践的な出力テクニックまで
Pythonのリストとは? Pythonのリスト(list)は、複数の要素をひとつにまとめて管理できるデータ型です。リスト内の各要素は順序を持って格納されており、それぞれの位置(インデックス)を指定することで、任意の要素にアクセスできます。 インデックスは0から始まる リストのインデックスは0から始まる点に注意が必要です。つまり、最初の要素が list[0]、2番目の要素が list[1]、3番目の要素が list[2] に対応します。 例えば、以下のようなリストを考えてみましょう。 numbers = [10, 20, 50, 40] print(numbers[2]) # 出力結果:5