检查元组在 Python 中是否有任何 empty/None 值的最佳方法是什么?

What is the best way to check if a tuple has any empty/None values in Python?

检查所有元组值的best/most有效方法是什么?我需要遍历所有元组项并检查还是有更好的方法?

例如:

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

检查这些元组,除t1之外的每个元组都应该return为真,这意味着存在所谓的空值。

P.S。有这个问题:Test if tuple contains only None values with Python,但它是否只是关于 None 值

非常简单:

not all(t1)

returns False 仅当 t1 中的所有值都是 non-empty/nonzero 而不是 None 时。 all短路,所以它只需要检查第一个空元素之前的元素,这使得它非常快。

对于您的具体情况,您可以使用 all() 函数,它检查列表的所有值是真还是假,请注意 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")

已提供使用 all 的答案:

not all(t1)

但是在像 t3 这样的情况下,这将 return 正确,因为其中一个值是 0:

t3 = (0.0, 3, 5)

'all' built-in 关键字检查给定可迭代对象的所有值是否都是计算为负布尔值 (False) 的值。 0、0.0、'' 和 None 的计算结果均为 False。

如果您只想测试 None(如问题标题所示),此方法有效:

any(map(lambda x: x is None, t3))

如果 t3 的任何元素是 None,则此 returns 为真,如果其中 none 个是,则为假。

如果有机会检查包含如下元组的元组中是否存在空值:

t1 = (('', ''), ('', ''))
t2 = ((0.0, 0.0), (0.0, 0.0))
t3 = ((None, None), (None, None))

你可以使用这个:

not all(map(lambda x: all(x), t1))

否则如果你想知道是否至少有一个正值,那么使用这个:

any(map(lambda x: any(x), t1))
None in (None,2,"a")

正确

None in (1,2,"a")

"" in (1,2,"")

正确

"" in (None,2,"a")

import numpy

np.nan in (1,2, np.nan)

正确

np.nan in (1,2, "a")