シーケンス・コレクションが空であるか判定する方法を説明します。
シーケンス・コレクションが空であるか判定
空のシーケンス・コレクションは偽と判定されます。
下記にコードを示します。
#"" str_false = '' if str_false: print("True str") else: print("False str") #() tupple_false = () if tupple_false: print("True tupple") else: print("False tupple") #[] list_false = [] if list_false: print("True list") else: print("False list") #{} dict_false = {} if dict_false: print("True dict") else: print("False dict") #set() set_false = set() if set_false: print("True set()") else: print("False set()") #range(0) range_false = set() if range_false: print("True range(0)") else: print("False range(0)") """出力 False str False tupple False list False dict False set() False range(0) """
空のシーケンスまたはコレクションは偽となることが、公式ドキュメントに書かれています。
主な組み込みオブジェクトで偽と判定されるものを次に示します:
・偽であると定義されている定数: None と False
https://docs.python.org/ja/3/library/stdtypes.html#truth-value-testing、真理値判定
・数値型におけるゼロ: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
・空のシーケンスまたはコレクション: ”, (), [], {}, set(), range(0)
その他オブジェクトが空であるか判定 判定
前提知識
クラスが__bool__()、__len__()を定義している場合、その結果によりオブジェクトが偽であるか判定できることが、公式ドキュメントからわかります。
どのようなオブジェクトでも真理値として判定でき、 if や while の条件あるいは以下のブール演算の被演算子として使えます。
オブジェクトは、デフォルトでは真と判定されます。ただしそのクラスが __bool__() メソッドを定義していて、それが False を返す場合、または __len__() メソッドを定義していて、それが 0 を返す場合は偽と判定されます。
https://docs.python.org/ja/3/library/stdtypes.html#truth-value-testing、真理値判定
下記、__len()__の説明です。__len__()が0を返すようなオブジェクトは偽とみなされます。
呼び出して組み込み関数
https://docs.python.org/ja/3/reference/datamodel.html#object.lenlen()
を実装します。 オブジェクトの長さを 0 以上の整数で返さなければなりません。 また、__bool__()
メソッドを定義しておらず、__len__()
メソッドが 0 を返すようなオブジェクトは、ブール演算コンテキストでは偽とみなされます。
方法
collectionsモジュールのdequeクラスが空であるか判定する方法を示します[1]。
dequeクラス以外のドキュメントに記載が無いクラスについても、__len__()が定義されていれば、dequeと同様の方法で空であるか判定することができます。
まず、__bool__()、__len__ () がクラスに定義されているか調べます。dequeの場合は、__len__()が定義されています(Visual Studio Codeの予測変換で確認)。
__len__()が定義されている場合、「 _len__()が0を返すようなオブジェクトは偽 」となります。つまり、dequeオブジェクトの要素数が0であれば偽です。
ですので、下記コードの様に、判定することができます。
import collections queue = collections.deque() print(queue.__len__()) if queue: print("true") else: print("false") """出力 0 false """
参考
[1]How to check if a deque is empty https://stackoverflow.com/questions/5652278/how-to-check-if-a-deque-is-empty
下記リンクのコメントが参考になります。deuqueの様に空であれば偽と判定される性質は、全てのcollectionsで共通であると述べられています(collectionsはモジュール名のことだと思います)。
https://stackoverflow.com/a/5652291/4203048
コメント