セットに含まれる要素だけをリストから抽出するPythonプログラム
Pythonでは、セット(set)に含まれる要素だけをリストから抽出したい場面がよくあります。そのような場合、シンプルな for ループと条件分岐(if文)を組み合わせるだけで簡単に実現できます。
サンプルコード
以下に具体的な実装例を示します。
my_list = [5, 7, 2, 7, 2, 4, 9, 8, 8]
print("The list is :")
print(my_list)
search_set = {6, 2, 8}
my_result = []
for element in my_list:
if element in search_set:
my_result.append(element)
print("The result is :")
print(my_result)実行結果
The list is : [5, 7, 2, 7, 2, 4, 9, 8, 8] The result is : [2, 2, 8, 8]
コードの解説
- まず、対象となるリストを定義し、コンソールに表示します。このリストには重複した要素が含まれています。
- 次に、検索条件となる特定の要素を持つセットを定義します。
- 抽出結果を格納するための空のリストを用意します。
forループでリストの各要素を順番に取り出し、その要素がセット内に存在するかどうかをin演算子で判定します。- 存在する場合は、あらかじめ用意した空のリストへ
appendメソッドで追加していきます。 - 最終的に、セットに含まれていた要素のみが抽出されたリストがコンソールに表示されます。
ポイント:セットを使うメリット
セットのメンバーシップ判定(in 演算子)は平均して O(1) の計算量で実行されるため、要素数が多い場合でも高速に動作します。もしリストに対して同じ判定を行うと O(n) かかるため、大規模なデータを扱う際はセットを活用するのが効率的です。
補足:リスト内包表記での簡潔な書き方
上記のコードは、リスト内包表記を使うともっと簡潔に書けます。
my_result = [element for element in my_list if element in search_set]
この1行で同じ結果が得られるため、状況に応じて使い分けるとよいでしょう。
-
【Python】ソート済みリストからk番目に欠けている数を効率的に求める方法
ソートされた重複のない整数リスト nums と整数 k が与えられたとき、リストの最初の要素を基準にして、k番目(0始まりのインデックス)に相当する欠落した数を見つける問題を考えてみましょう。 問題の例 例えば、nums = [5,6,8,10,11]、k = 1 という入力の場合を確認します。このリストには「7」と「9」という2つの数が欠けています。7がインデックス0(1番目)の欠落数、9がインデックス1(2番目)の欠落数に対応するため、k = 1 のときの出力は 9 となります。 解決のためのアプローチ この問題は、隣り合う要素同士の差に注目することで解けます。各間隔にいくつの数が欠け
-
Pythonで2つの連結リストの要素をインターリーブして1つにまとめる方法
2つの連結リスト(リンクリスト)l1とl2が与えられたとき、l1から始めて両方のリストの要素を交互に組み合わせた(インターリーブした)1つの連結リストを返すことを考えます。どちらかのリストにノードが余った場合は、その残りのノードを結果のリストの末尾にそのまま追加します。 例えば、入力が l1 = [5,4,6,3,4,7]、l2 = [8,6,9] の場合、出力は [5,8,4,6,6,9,3,4,7] となります。 アルゴリズムの手順 この問題を解くには、以下の手順に従います。 ans := l1 と初期化する l2 が null でない限り、以下を繰り返す ans が null でない