Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python – リスト内包表記とany関数を使ってブール値Trueを含む行を抽出する方法

Pythonでは、ネストされたリストの中からブール値Trueを1つでも含む行だけを抽出したいケースがあります。このような場合、リスト内包表記と組み込み関数 any() を組み合わせることで、簡潔かつ効率的に実現できます。

any() は、渡されたイテラブル内の要素が1つでも真(Truthy)であれば True を返し、すべて偽(Falsy)であれば False を返す関数です。これをフィルタリング条件として利用します。

サンプルコード

my_tuple = [[False, True], [False, False], [True, False, True], [False]]

print("元のリスト:")
print(my_tuple)

my_result = [row for row in my_tuple if any(element for element in row)]

print("抽出結果:")
print(my_result)

実行結果

元のリスト:
[[False, True], [False, False], [True, False, True], [False]]
抽出結果:
[[False, True], [True, False, True]]

処理の流れと解説

  • まず、複数のリストを要素として持つ「リストのリスト」を定義し、コンソールに表示して内容を確認します。

  • 次に、リスト内包表記を使って各 row(行)を順番に取り出し、条件式で判定を行います。

  • 条件部分の any(element for element in row) により、その行に True の要素が1つでも存在するかどうかがチェックされます。結果は必ず True または False になります。

  • 条件を満たした行のみが新しいリストとしてまとめられ、変数 my_result に代入されます。

  • 最後に、その結果をコンソールに出力しています。上記の例では [False, True][True, False, True] の2行が該当し、[False, False][False] はすべて False のため除外されています。

補足ポイント

  • 逆に「すべての要素が True である行」を抽出したい場合は、all() 関数に置き換えるだけで同じ書き方が使えます。

  • any() / all() は短絡評価(ショートサーキット)を行うため、大きなデータでも高速に動作します。

  • 条件式は if any(row) とさらにシンプルに書くことも可能です。

  1. Python・pandasのブールインデックス徹底解説!True/Falseと0/1でデータを抽出する方法

    pandasのDataFrameでは、True / False といったブール値や、1 / 0 のような整数値をそのままインデックスとして使用できます。これらを活用すると、条件に合致するレコードだけを簡単にフィルタリングでき、データ分析の効率が大きく向上します。本記事では、ブールインデックス操作に使えるさまざまな手法を、具体的なサンプルコードとともにわかりやすく解説します。ブールインデックスの作成まず、ゲームのスコアデータを扱うDataFrameを例に見ていきましょう。各曜日に獲得したポイントが辞書形式で格納されたデータを用意します。このDataFrameに対して、TrueとFalseをインデ

  2. Pythonのany()とall()関数とは?違いと使い方を徹底解説

    Pythonには、「AND」「OR」の論理演算に相当する処理を行うための組み込み関数として、all()とany()が用意されています。これらの関数を使うことで、リストやタプルなどのイテラブルの中身を簡潔に判定できます。 Pythonのany()関数 any()関数は、イテラブル内の要素が1つでも真(True)であればTrueを返し、それ以外はFalseを返します。イテラブルが空の場合もFalseを返します。 構文 any(iterable) 引数には、リスト・タプル・辞書などのイテラブルオブジェクトを指定します。 例1:リストの場合 >>> mylst = [False,