シーケンス・コレクションが空であるか判定する方法を説明します。
シーケンス・コレクションが空であるか判定
空のシーケンス・コレクションは偽と判定されます。
下記にコードを示します。
#""
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

コメント