Pythonのbool値を反転させる方法【TrueからFalse, FalseからTrueへ】
目次
- Pythonのbool値を反転させる方法
- TrueをFalseに反転
- FalseをTrueに反転
- notを使ったテクニック「bool型への強制変換」
- リスト(配列)内のbool値をすべて反転
- all()の結果を反転
- any()の結果を反転
- おわりに
Pythonのbool値を反転させる方法
Pythonではbool値(論理値)を扱えます。
これはTrueやFalseなどです。
この論理値を反転させるにはnot
演算子を使います。
関連記事
TrueをFalseに反転
Trueにnot
演算子を使うとその結果はFalseになります。
print(not True) # False
FalseをTrueに反転
Falseにnot
演算子を使うとその結果はTrueになります。
print(not False) # True
notを使ったテクニック「bool型への強制変換」
関数などを作って関数の中でたとえば整数で計算したとします。
それでその計算結果をboolで返したいとなったときに、その整数の計算結果をbool型にしておくと何となく気持ちがいいです。
そういう時は「not
演算子の2回掛け」が良く行われます。
たとえば↓を見てください。
print(not not 1) # True
↑の例では整数1
にnot
を2回かけて結果をboolにしています。
まず1回目のnot
で整数1
はFalseに変換されます。
そして2回目のnot
でFalseがTrueになります。
こうすると真になる整数を強制的にTrueにすることができます。
Pythonではbool値は計算式の文脈で整数として評価されますので、こういった変換は必要ないです。
しかし関数の結果などを真偽値で返したい、その方がきれい、という場合などはこういったテクニックが使われます。
リスト(配列)内のbool値をすべて反転
配列内のbool値をすべて反転する処理です。
map()
を使うと↓のように書けます。
l1 = [True, False, True, False] l2 = list(map(lambda x: not x, l1)) print(l2) # [False, True, False, True]
map()
は第1引数の関数を第2引数のリストの要素に適用する関数です。
↑の第1引数のラムダ式は引数x
をnot
で反転させます。
その反転結果が新しいリストに格納されます。
結果、l2
には反転された値が格納されます。
↑の例ではリストを新規に作っていましたが既存のリストを利用したい場合は↓のようにも書けます。
l1 = [True, False, True, False] for i, x in enumerate(l1): l1[i] = not x print(l1) # [False, True, False, True]
enumerate()
はリストから添え字と要素を同時に取り出します。
↑の例では要素x
を反転させてl1[i]
に保存しています。
これも結果は同様に値が反転したリストになります。
あるいはリスト内包表記を使う場合は↓のようにも書けます。
l1 = [True, False, True, False] l2 = [not x for x in l1] print(l2) # [False, True, False, True]
↑の例では新しくl1
からl2
のリストを作っています。
要素の値は反転されています。
辞書の値をすべて反転させたい場合は辞書内包表記が使えます。
d1 = {'a': True, 'b': False} d2 = { k: not v for k, v in d1.items() } print(d2) # {'a': False, 'b': True}
あるいは↓のようにfor文で愚直に書く方法もあります。
d1 = {'a': True, 'b': False} for k, v in d1.items(): d1[k] = not v print(d1) # {'a': False, 'b': True}
↑の場合は辞書を新しく作成せずに既存の辞書を再利用しています。
all()の結果を反転
組み込み関数のall()
はリストの要素がすべて真ならTrueを返します。
この結果をnot
で反転するとどうなるでしょうか。
l = [True, True, True] print(all(l)) # True print(not all(l)) # False l = [True, False, True] print(all(l)) # False print(not all(l)) # True
all()
は「すべて真ならTrue」です。
これを反転すると「偽が1つでもあればTrue」になります。
any()の結果を反転
組み込み関数のany()
はリストのいずれかの要素が真ならTrueを返します。
この結果を反転すると……
l = [False, True, False] print(any(l)) # True print(not any(l)) # False l = [False, False, False] print(any(l)) # False print(not any(l)) # True
any()
は「いずれかが真ならTrue」です。
これを反転すると「すべて偽ならTrue」になります。
おわりに
今回はPythonのbool値の反転を解説しました。
bool値を反転するケースはけっこうあるので押さえておいて損はないですね。
(^ _ ^) | 反転してやる! |
(・ v ・) | グレてしまった |