すべてのタプル値をチェックするための最良/最も効率的な方法は何ですか?すべてのTupleアイテムを繰り返して確認する必要がありますか、それともさらに良い方法がありますか?
例えば:
t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)
これらのタプルをチェックすると、t1
を除くすべてのタプルはTrueを返すはずです。つまり、いわゆる空の値があることを意味します。
追伸この質問があります: タプルがPython でNone値のみを含むかどうかをテストしますが、それはNone値についてのみです
それは非常に簡単です:
not all(t1)
t1
のすべての値がFalse
ではなく空ではない/ゼロ以外の場合にのみ、None
を返します。 all
は短絡するため、最初の空の要素までチェックするだけで済み、非常に高速になります。
すべてを使用した回答が提供されています。
not all(t1)
ただし、t3のような場合、値の1つが0であるため、これはTrueを返します。
t3 = (0.0, 3, 5)
'all'組み込みキーワードは、指定されたイテラブルのすべての値が負のブール値(False)に評価される値であるかどうかをチェックします。 0、0.0、 ''、およびNoneはすべてFalseと評価されます。
(質問のタイトルが示唆するように)Noneのみをテストしたい場合、これは動作します:
any(map(lambda x: x is None, t3))
これは、t3の要素のいずれかがNoneである場合にTrueを返し、要素のどれでもない場合にFalseを返します。
万が一、これらのタプルを含むタプルに空の値があるかどうかを確認したい場合:
t1 = (('', ''), ('', ''))
t2 = ((0.0, 0.0), (0.0, 0.0))
t3 = ((None, None), (None, None))
これを使用できます:
not all(map(lambda x: all(x), t1))
それ以外の場合、少なくとも1つの正の値があるかどうかを知りたい場合は、これを使用します。
any(map(lambda x: any(x), t1))
特定の場合、all()
functionを使用して、リストのすべての値がtrueまたはfalseであることを確認できます。python None
、空の文字列と0
は偽と見なされます。
そう -
>>> t1 = (1, 2, 'abc')
>>> t2 = ('', 2, 3)
>>> t3 = (0.0, 3, 5)
>>> t4 = (4, 3, None)
>>> all(t1)
True
>>> all(t2)
False
>>> all(t3)
False
>>> all(t4)
False
>>> if '':
... print("Hello")
...
>>> if 0:
... print("Hello")