And*_*ius 21 python tuples is-empty
检查所有元组值的最佳/最有效方法是什么?我是否需要迭代所有元组项目并检查或者是否有更好的方法?
例如:
t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)
Run Code Online (Sandbox Code Playgroud)
检查这些元组,除了之外的每个元组都t1应该返回True,这意味着有所谓的空值.
PS有这样一个问题:测试元组是否只包含无值的值,但是它只包含无值
Tim*_*ker 34
这很容易:
not all(t1)
Run Code Online (Sandbox Code Playgroud)
False仅当所有值t1都为非空/非零时才返回None.all短路,所以它只需要检查第一个空元素,这使得它非常快.
提供了使用all的答案:
not all(t1)
Run Code Online (Sandbox Code Playgroud)
但是在类似t3的情况下,这将返回True,因为其中一个值为0:
t3 = (0.0, 3, 5)
Run Code Online (Sandbox Code Playgroud)
'all'内置关键字检查给定iterable的所有值是否为计算为负布尔值的值(False).0,0.0,''和None都评估为False.
如果您只想测试None(如问题标题所示),则可以:
any(map(lambda x: x is None, t3))
Run Code Online (Sandbox Code Playgroud)
如果t3的任何元素为None,则返回True;如果没有,则返回False.
如果有任何机会想要检查包含如下元组的元组中是否有空值:
t1 = (('', ''), ('', ''))
t2 = ((0.0, 0.0), (0.0, 0.0))
t3 = ((None, None), (None, None))
Run Code Online (Sandbox Code Playgroud)
你可以使用这个:
not all(map(lambda x: all(x), t1))
Run Code Online (Sandbox Code Playgroud)
否则,如果您想知道是否至少有一个正值,请使用以下命令:
any(map(lambda x: any(x), t1))
Run Code Online (Sandbox Code Playgroud)