Python – 特定の要素をすべて含む行をフィルタリングする方法
Pythonでは、指定した要素をすべて含む行(サブリスト)だけを抽出したい場面があります。そんなときは、リスト内包表記と組み込み関数all()を組み合わせることで、簡潔かつ効率的にフィルタリングを実現できます。
以下に具体的な実装例を示します。
サンプルコード
my_list = [[261, 49, 61], [27, 49, 3, 261], [261, 49, 85], [1, 1, 9]]
print("The list is :")
print(my_list)
check_list = [49, 61, 261, 85]
my_result = [index for index in my_list if all(element in check_list for element in index)]
print("The result is :")
print(my_result)
出力結果
The list is : [[261, 49, 61], [27, 49, 3, 261], [261, 49, 85], [1, 1, 9]] The result is : [[261, 49, 61], [261, 49, 85]]
処理の流れと解説
まず、ネストされたリスト(リストのリスト)を定義し、コンソールに表示します。
次に、フィルタ条件となる整数のリスト
check_listを定義します。リスト内包表記で元のリストを順番に走査し、各サブリストに対して
all()関数を使い、そのすべての要素がcheck_listに含まれているかどうかを判定します。条件を満たした行のみが新しいリストに追加され、変数
my_resultに代入されます。最終的な結果がコンソールに出力されます。
ポイント:パフォーマンスを上げたい場合
データ量が多い場合は、check_list をセット(set)に変換しておくと、メンバーシップ判定(in)がO(1)で行えるため高速化できます。
check_set = set(check_list) my_result = [row for row in my_list if all(element in check_set for element in row)]
また、部分集合を判定する issubset() を使えば、さらに読みやすく書くことも可能です。
my_result = [row for row in my_list if set(row).issubset(check_set)]
このように、リスト内包表記と all() を使えば、複雑な条件でのフィルタリングもわずか数行のコードで実装できます。
-
Pythonでリスト内の要素の出現頻度(出現回数)を数える方法
この記事では、Pythonでリスト内の各要素が何回出現するか(出現頻度)を調べる方法を解説します。実装のアプローチはいくつかありますが、ここでは代表的な2つの方法を紹介します。 方法1:辞書を使って手動でカウントする まず、辞書を活用してロジックを自前で実装する基本の方法から見ていきましょう。以下の手順でコードを作成します。 要素を含むリストと、空の辞書を用意します。 リストの各要素を順番に処理します。 その要素がすでに辞書に存在するかどうかを確認します。 存在する場合は、対応するカウントを1つ増やします。 存在しない場合は、カウントを1で新しく登録します。 最後に結果の辞書を出力し
-
Pythonでインデックスに基づいてネストされたリストに要素を加算する方法
Pythonでは、リストの中にさらにリストを入れた「ネストされたリスト(入れ子構造のリスト)」を作成できます。本記事では、シンプルなリストの各要素を、ネストされたリストの対応する要素に加算する方法を解説します。リスト同士の長さが異なる場合、短い方のリストの長さが結果のリストの最大長となります。以下に、この処理を実現する複数の方法を紹介します。forループを使用する方法この方法では、短い方のリストの長さを取得し、その要素を順番にループ処理しながら、大きい方のリストの対応する要素に加算していきます。各要素はappend()関数を使って結果リストに追加します。コード例simple_list = [2