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)とさらにシンプルに書くことも可能です。
-
Python・pandasのブールインデックス徹底解説!True/Falseと0/1でデータを抽出する方法
pandasのDataFrameでは、True / False といったブール値や、1 / 0 のような整数値をそのままインデックスとして使用できます。これらを活用すると、条件に合致するレコードだけを簡単にフィルタリングでき、データ分析の効率が大きく向上します。本記事では、ブールインデックス操作に使えるさまざまな手法を、具体的なサンプルコードとともにわかりやすく解説します。ブールインデックスの作成まず、ゲームのスコアデータを扱うDataFrameを例に見ていきましょう。各曜日に獲得したポイントが辞書形式で格納されたデータを用意します。このDataFrameに対して、TrueとFalseをインデ
-
Pythonのany()とall()関数とは?違いと使い方を徹底解説
Pythonには、「AND」「OR」の論理演算に相当する処理を行うための組み込み関数として、all()とany()が用意されています。これらの関数を使うことで、リストやタプルなどのイテラブルの中身を簡潔に判定できます。 Pythonのany()関数 any()関数は、イテラブル内の要素が1つでも真(True)であればTrueを返し、それ以外はFalseを返します。イテラブルが空の場合もFalseを返します。 構文 any(iterable) 引数には、リスト・タプル・辞書などのイテラブルオブジェクトを指定します。 例1:リストの場合 >>> mylst = [False,