ユーニックス総合研究所

  • home
  • archives
  • python-bool-array

Pythonのbool(真偽値)の配列の書き方使い方

  • 作成日: 2022-04-11
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonのboolの配列の書き方

Pythonにはboolという型があります。
このbool型を使って配列を作る方法を解説します。

boolは整数と親和性がある型です。
この特性を踏まえておくと配列を作るときに役立つかもしれません。

関連記事

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】

真偽値(True, False)

Pythonのbool型の使い方ですが、bool型の値は大きく分けて↓の2つになります。

  • True
  • False

これらの2つのオブジェクトはグローバルなオブジェクトです。
どこからでも参照することができます。

Trueは日本語にすると「トゥルー」、意味は「真」になります。
この値は正しい値、整数にすると0以外になります。

Falseは日本語にすると「フォルス」、意味は「偽」になります。
この値は正しくない値、整数にすると0になります。

たとえば「関数が成功したか?」ということをboolで表したいとします。
その場合はTrueが成功で、Falseが失敗になります。
これは慣例の話で、失敗をTrueとして扱うこともできます。

これら2つの値(True, False)は真偽値と呼ばれます。
真偽値は変数に保存することもできます。

t = True  
f = False  

これらの真偽値はもちろん配列(リスト)に保存することもできます。

真偽値のタイプを見る

真偽値はbool型です。
そのためTrueFalsetype()に渡すとboolが返ってきます。

print(type(True))  # <class 'bool'>  
print(type(False))  # <class 'bool'>  

真偽値かどうか判定したい場合はtype()を使うかisinstance()を使います。

print(type(True) == bool)  # True  
print(isinstance(True, bool))  # True  
print(isinstance(1, bool))  # False  

配列をfor文などで回して、配列の要素が真偽値かどうかチェックしたい場合は、上記の方法が使えます。
真偽値は整数と混合して使えますが、厳密な型判定をすると整数と真偽値は違う型になります。
その点は注意が必要です。

真偽値を配列に保存する

真偽値を配列に保存する場合は↓のようにコーディングします。

ary = [True, False, True, False]  

↑の場合、配列aryには真偽値が4つ保存されます。

print(len(ary))  # 4  

また、真偽値は計算式の文脈では整数として扱われます。
そのため整数と混同して配列に保存することもできます。

ary = [True, 1, False, 0]  

もちろん計算式の文脈では真偽値は整数として扱われますが、型自体は違っています。
配列で真偽値をboolとして厳密に型判定をしたい場合は、整数を混ぜて使うのは注意が必要です。

真偽値で配列を初期化する

真偽値で配列を初期化したい場合です。
たとえばFalseで配列を埋めたい場合はあります。
その場合は↓のようにコードを書きます。

ary = [False] * 4  

print(ary)  # [False, False, False, False]  

↑のように[False] * 4と書くと、要素を4つもった配列を初期化して作成できます。

あるいはリスト内包表記も使えます。

ary = [False for _ in range(4)]  

print(ary)  # [False, False, False, False]  

リスト内包表記で、カウント変数が0か2の倍数だったらFalse, それ以外はTrueという感じで配列を初期化することもできます。
その場合は↓のようにやります。

ary = [bool(i % 2) for i in range(4)]  

print(ary)  # [False, True, False, True]  

↑のようにすると交互にFalseTrueが入った配列を作れます。
FalseTrueの順番を逆にしたい場合は↓のように書きます。

ary = [bool(i % 2 == 0) for i in range(4)]  

print(ary)  # [True, False, True, False]  

入れ子の配列(行列)にしたい場合はリスト内包表記で↓のように書けます。

mat = [[False for _ in range(2)] for _ in range(3)]  

print(mat)  # [[False, False], [False, False], [False, False]]  

真偽値の入った配列をfor文で回す

真偽値の入っている配列for文で回したい場合です。
これは普通にfor文を書きます。

ary = [False, True, False, True]  

for b in ary:  
    print(b)  
False  
True  
False  
True  

配列内の真偽値を反転する

真偽値の入っている配列で、その真偽値を反転して新しい配列を作りたい場合は↓のように書きます。

ary = [False, True, False, True]  
rev = [not b for b in ary]  

print(rev)  # [True, False, True, False]  

↑の場合は、リスト内包表記で配列内の真偽値を反転させてます。
not bというのが反転させているところです。

真偽値はnot演算子を使うと、その真偽値を反転できます。
つまりTrueFalseに、FalseTrueになります。

おわりに

今回はPythonのboolを配列で使う方法について解説しました。
Pythonのboolと配列はよく使うデータ型ですのでセットで覚えておくといいかもしれません。

🦝 < boolを配列で扱う

🐭 < 真偽値