web-dev-qa-db-ja.com

Pythonでタプルに空/なしの値があるかどうかを確認する最良の方法は何ですか?

すべてのタプル値をチェックするための最良/最も効率的な方法は何ですか?すべてのTupleアイテムを繰り返して確認する必要がありますか、それともさらに良い方法がありますか?

例えば:

t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)

これらのタプルをチェックすると、t1を除くすべてのタプルはTrueを返すはずです。つまり、いわゆる空の値があることを意味します。

追伸この質問があります: タプルがPython でNone値のみを含むかどうかをテストしますが、それはNone値についてのみです

20
Andrius

それは非常に簡単です:

not all(t1)

t1のすべての値がFalseではなく空ではない/ゼロ以外の場合にのみ、Noneを返します。 allは短絡するため、最初の空の要素までチェックするだけで済み、非常に高速になります。

33
Tim Pietzcker

すべてを使用した回答が提供されています。

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を返します。

6
Grismar

万が一、これらのタプルを含むタプルに空の値があるかどうかを確認したい場合:

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))
1
tsveti_iko

特定の場合、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")
0
Anand S Kumar