如何最好/最有效地检查所有元组值?我需要遍历所有元组项并进行检查,还是有更好的方法?
例如:
t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)
检查这些元组,除了t1
之外的每个元组都应返回True,这意味着存在所谓的空值。
P.S. 还有这个问题:使用Python测试元组是否仅包含None值,但它只涉及到None值。
如何最好/最有效地检查所有元组值?我需要遍历所有元组项并进行检查,还是有更好的方法?
例如:
t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)
检查这些元组,除了t1
之外的每个元组都应返回True,这意味着存在所谓的空值。
P.S. 还有这个问题:使用Python测试元组是否仅包含None值,但它只涉及到None值。
这很容易:
not all(t1)
仅当t1
中所有值都不为空/非零且不为None
时,返回False
。all
会短路,因此它只需检查第一个空元素之前的元素,这使得它非常快速。
namedtuple
(因为它是一个子类,当然可以)=) - jpmc26False
就是 0
。 - Tim Pietzcker已提供使用所有答案:
not all(t1)
然而在t3这种情况下,这将返回True,因为其中一个值是0:
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))
any(map(lambda x: any(x), t1))
针对你的特定情况,你可以使用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")
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")
假