Pythonでタプル内の重複要素を別の値に置き換える方法
Pythonでは、タプル内に含まれる重複した要素を検出し、別の値に置き換えたいケースがあります。このような場合、set(セット)とリスト内包表記を組み合わせることで、シンプルかつ効率的に実装できます。
setとリスト内包表記とは
リスト内包表記は、リストやタプルなどのイテラブルを反復処理しながら要素を加工するための、Python特有の簡潔な記法です。for文を1行で書けるため、コードの可読性と記述効率が向上します。
また、Pythonにはsetというデータ型が標準で用意されています。セットには重複しない一意の要素のみが格納され、和集合・差集合・積集合・対称差といった集合演算にも活用できます。ここでは「すでに登場した要素かどうか」を判定する用途で使用します。
サンプルコード
以下は、タプル内の重複要素を文字列 'FILL' に置き換える実装例です。
my_tuple_1 = (11, 14, 0, 78, 33, 11, 10, 78, 0)
print("元のタプル : ")
print(my_tuple_1)
my_set = set()
my_result = tuple(ele if ele not in my_set and not my_set.add(ele)
else 'FILL' for ele in my_tuple_1)
print("置き換え後のタプル: ")
print(my_result)
実行結果
元のタプル : (11, 14, 0, 78, 33, 11, 10, 78, 0) 置き換え後のタプル: (11, 14, 0, 78, 33, 'FILL', 10, 'FILL', 'FILL')
2回目以降に出現した 11、78、0 がすべて 'FILL' に置き換えられていることが確認できます。
コードの解説
- まず、重複を含むタプルを定義し、コンソールに表示します。
- 次に、空のセット
my_setを作成します。これが「すでに処理済みの要素」を記録する役割を担います。 - リスト内包表記でタプルを反復処理し、各要素について以下の判定を行います。
- 要素がセットに存在しない場合(初出の場合)は、その要素をそのまま採用し、同時に
my_set.add(ele)でセットに追加します。 - すでにセットに存在する場合(重複の場合)は、代わりに
'FILL'を採用します。 - 最後に
tuple()関数で結果をタプルに変換し、変数my_resultに代入して表示します。
ポイント:条件式の中でのadd()の活用
このコードの鍵となるのは、条件式内の not my_set.add(ele) という部分です。Pythonの set.add() メソッドは戻り値として None を返すため、常に偽(falsy)と評価されます。つまり、要素がセットに存在しない場合は add() が実行されてセットに登録され、条件全体が真となって元の要素が採用される仕組みです。
なお、より読みやすさを優先する場合は、通常のfor文とif文を組み合わせて同じ処理を書くこともできます。処理速度を重視する場面では、セットによる存在チェックがO(1)で動作するため、大きなデータでも高速に動作する点もメリットです。
-
Pythonタプル(tuple)入門:作成・操作・削除の基本をコード例で解説
Pythonにおけるタプル(tuple)は、順序付け(ordered)かつ変更不可(immutable)という特徴を持つコレクションです。変更不可であるため、一度作成したタプルに要素を追加したり削除したりすることはできません。 タプルは丸括弧 () と、最低1つのカンマ , を使って作成します。 また、タプルはリストと同じようにインデックス指定やスライシングが可能ですが、スライスの結果もタプルとして返される点に注意しましょう。 タプルの作り方 colorsTuple = (red, green, blue) print(colorsTuple) 実行結果: (red, green, blue
-
Pythonのセット(set)とは?作成・操作・結合の基本を徹底解説
Pythonのセット(set)は、順序を持たない(unordered)コレクション型で、重複のない一意な(unique)かつ変更不可能な(immutable)オブジェクトを格納します。つまり、セットに同じ要素を複数入れることはできず、一度作成した要素そのものを書き換えることもできません。 ポイント: セットの「要素」はイミュータブル(変更不可)ですが、セット自体はミュータブル(変更可能)です。そのため、後から要素の追加や削除を行うことは可能です。 セットは順序を保持しません。同じセットを何度 print しても、表示される要素の並び順が変わることがあります。 Pythonでは、セットを波括弧