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

PythonのバイナリリストからTrue値のインデックスを効率的に取得する方法

Pythonのリストに True / False0 / 1 のような値だけが含まれている場合、そのリストは「バイナリリスト」と呼ばれます。本記事では、バイナリリストを対象に、要素がTrueと評価される位置(インデックス)を抽出する方法を2つ紹介します。

方法1:enumerate関数を使う

enumerate() 関数を使うと、リストの各要素とそのインデックスを同時に取り出せます。内包表記の中で条件判定を行い、Trueと評価される要素のインデックスだけを新しいリストに格納します。Pythonでは 1True として扱われるため、数値が混在するリストでも正しく動作します。

コード例

listA = [True, False, 1, False, 0, True]
# 元のリストを表示
print("元のリスト :\n ", listA)
# enumerate() を使用
res = [i for i, val in enumerate(listA) if val]
# 結果を表示
print("True値を持つインデックス :\n ", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

元のリスト :
[True, False, 1, False, 0, True]
True値を持つインデックス :
[0, 2, 5]

方法2:itertools.compressを使う

itertools モジュールの compress() 関数を使う方法もあります。compress(データ, セレクタ) の形式で呼び出し、セレクタ側の値がTrueである位置に対応するデータ側の要素のみを返します。ここでは range(len(listA)) をデータ側に渡すことで、True値を持つインデックスだけを効率的に抽出できます。

コード例

from itertools import compress
listA = [True, False, 1, False, 0, True]
# 元のリストを表示
print("元のリスト :\n ", listA)
# compress() を使用
res = list(compress(range(len(listA)), listA))
# 結果を表示
print("True値を持つインデックス :\n ", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

元のリスト :
[True, False, 1, False, 0, True]
True値を持つインデックス :
[0, 2, 5]

まとめ

どちらの方法も同じ結果になりますが、enumerate() を使った内包表記は可読性が高く、追加のインポートが不要な点がメリットです。一方、compress() はC言語レベルで実装されているため、大きなリストを扱う場合に高速に動作する傾向があります。用途やコードベースのスタイルに合わせて使い分けるとよいでしょう。

  1. Pythonのbool()関数とは?Falseを返す条件とサンプルコードを解説

    Pythonの組み込み関数 bool() は、引数として渡された値を真偽値(True / False)に変換して返します。引数には任意のオブジェクトを指定でき、戻り値は以下の条件に従って決まります。ここで挙げる値以外は、すべて True を返します。 False を返す条件 bool() が False を返すのは、次のような場合です。 None False に評価される条件式 数値型のゼロ(int 型の 0、float 型の 0.0 など) 空のシーケンス(()、[]、 など) 空のマッピング({} など) __bool__() または __len__() メソッドが 0 または Fal

  2. Pythonの辞書(ディクショナリ)からすべての値をリストとして取得する方法

    Pythonの辞書に格納されたすべての値をリスト形式で取得したい場合、最もシンプルな方法は dict.values() メソッドを使うことです。このメソッドは辞書内のすべての値を返すため、list() 関数で囲むことで簡単にリストへ変換できます。values() メソッドを使った基本的な例my_dict = {name: TutorialsPoint, time: 15 years, location: India} value_list = list(my_dict.values()) print(value_list)出力結果上記のコードを実行すると、次のような出力が得られます。[Tuto