スポンサーリンク

【Python】if文でのNone、空文字、True、False、0、”==”と”is”の違いなどの判定を整理

スポンサーリンク
スポンサーリンク
この記事は約4分で読めます。

Pythonのif文でNone、空文字、0の判定をする時、思った通りに動作しないことがよくあるため、この記事でそれぞれの判定についてまとめます。

 

Bool変数(True,False)の判定

コマンドプロンプトで以下を実行して確認

True

 

False

 

 

 

 

空文字

 

空文字はboolean(True,False)とも、Noneとも別。

長さが0の文字列

 

 

0

 

 

d=0の時、not d はTrueになる。

d=100の時、not dはFalseになる。

 

 

None

 

 

・Noneはシングルトンオブジェクト

・シングルトンとはプログラム中に必ず1つしか存在しないオブジェクト

・Noneについては必ずis比較を行う

 

 

Null

・PythonにはNullがない

・Noneは指し示す先にNoneがあるが、Nullは指し示す先には何もないという意味で厳密には異なる

 

 

“==”と”is”の違い

==は値が同じであるかを判定する

 

isはオブジェクトが同じであるかを判定する。

 

二次元リストの作成

結論から書くと、二次元リストを作るにはリスト内包を使う。

 

 

詳細は以下の通り。

各要素が、同じ値、同じオブジェクトである二次元リストと、

各要素が、同じ値、異なるオブジェクトである二次元リストの作り方について整理。

 

以下は、二次元リストを違う手順で作成している。

 

list1とlist2は一見同じに見えるが実際は同じではない。

list1内の各リストは全て同じオブジェクト。

※全て同じオブジェクトなので値は当然全て同じになる

list2内の各リストは全て異なるオブジェクト。

※全てのリストは異なるオブジェクトだが、同じ値を持つ。

 

list1のある要素を変更すると、list1内の全ての要素が変化する↓

実行結果を見ると、list1内の3つのリストは全て、2が100に変化した。

これは、list1内の各リストが同じオブジェクトであることが理由。

なので、3つのリストのうち、どれか1つを変更すると、他の2つのリストも変化する。

3つのリストは、メモリ上の同じ場所を参照していることからこのような動作になる。

 

 

list2のある要素を変更すると、list2内で指定した要素だけが変化する↓

実行結果を見ると、list2内の2番目のリストの2だけが100に変化した。

これは、list2内の各リストが、全て異なるオブジェクトであることが理由。

なので、3つのリストのうち、指定したリストだけが変化する。

3つのリストは、メモリ上でも異なる場所にそれぞれ保存されていることからこのような動作になる。

 

リスト内包を使うことで、同じ値で、異なるオブジェクトであるリストを作ることができる

コメント