在Python中检查元组是否有空/无值的最佳方法是什么?

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短路,所以它只需要检查第一个空元素,这使得它非常快.

  • 也适用于`namedtuple`(因为它是一个子类,当然)=) (2认同)

Gri*_*mar 7

提供了使用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.


tsv*_*iko 5

如果有任何机会想要检查包含如下元组的元组中是否有空值:

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)