Pythonで順序を保持したままリストのタプルから重複を削除する方法
リストのタプル(タプルの中にリストが入った構造)に含まれる重複要素を、元の順序を保持したまま削除したいケースはよくあります。そんなときは、リスト内包表記とset(セット)を組み合わせることで、シンプルかつ効率的に実現できます。
使用するテクニック
リスト内包表記は、リストを反復処理しながら要素に対して操作を行うための簡潔な記法です。for文や条件分岐を1行で書けるため、コードの可読性が向上します。
set型はPythonに標準で用意されているデータ型で、重複しない一意な要素のみを格納できます。また、積集合・差集合・和集合・対称差といった集合演算にも活用できる便利な型です。
サンプルコード
my_tuple_1 = ([1, 21, 34] , [11, 0, 98], [45, 67, 56])
print("The tuple of list is : ")
print(my_tuple_1)
temp_val = set()
my_result = [elem for elem in my_tuple_1 if not(tuple(elem) in temp_val or temp_val.add(tuple(elem)))]
print("The unique tuple of list is : ")
print(my_result)出力結果
The tuple of list is : ([1, 21, 34], [11, 0, 98], [45, 67, 56]) The unique tuple of list is : [[1, 21, 34], [11, 0, 98], [45, 67, 56]]
コードの解説
- まず、リストを要素として持つタプルを定義し、コンソールに出力します。
- 次に、既出の要素を記録するための空のセットを作成します。
- リスト内包表記でタプルを反復処理し、各リストをtuple()でタプルに変換したものがすでにセットに存在しないかを確認します。
- 存在しない場合は要素を結果リストに追加するとともに、temp_val.add()でセットにも登録します。add()はNone(偽と評価される)を返すため、or演算子と組み合わせることで1つの条件式として機能します。
- これにより、重複を含まない一意な値だけを持つ結果が得られます。
- 最終的な結果を変数my_resultに代入し、コンソールに表示します。
ポイント
リストはハッシュ化できないため、そのままではセットに登録できません。そこでtuple(elem)のようにタプルへ変換することで、比較・登録を可能にしています。この手法を使えば、順序を崩さずに重複だけを取り除くことができます。
-
Pythonのリスト(list)とタプル(tuple)の違いを徹底解説!使い分けのポイント
Pythonには複数の値をまとめて扱うためのデータ構造として「リスト(list)」と「タプル(tuple)」が用意されています。どちらもシーケンス型の一種で似たような使い方ができますが、「変更可能かどうか」「処理速度」「メモリ効率」などの点で大きな違いがあります。この記事では、それぞれの特徴とコード例、そして6つの観点からの比較表を使って、両者の違いと使い分けのポイントをわかりやすく解説します。リスト(list)とはリストは、異なる型のオブジェクトを格納できるミュータブル(変更可能)なコンテナです。要素の追加・削除・変更が自由に行えるため、データの入れ替えや繰り返し処理(イテレーション)によく
-
Pythonのリストとタプルの違いとは?特徴と使い分けのポイントを解説
リストとタプルはどちらもシーケンス型 リスト(list)とタプル(tuple)は、どちらもPythonにおける「シーケンス型」に分類されるデータ型です。両者ともカンマで区切られた複数の要素を持ち、数値や文字列など異なる型のオブジェクトを混在させて格納することができます。 最大の違いは「可変か不変か」 リストとタプルの最も重要な違いは、リストが可変(mutable)であるのに対し、タプルは不変(immutable)であるという点です。 不変(イミュータブル)なオブジェクトは、一度メモリ上に作成されると内容を変更できません。そのため、タプルに対しては要素の追加・変更・削除が一切行えません。一方、