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

时间:2015-07-01 06:49:51

标签: python tuples is-empty

检查所有元组值的最佳/最有效方法是什么?我是否需要迭代所有元组项并检查或者是否有更好的方法?

例如:

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

检查这些元组,除t1之外的每个元组都应该返回True,这意味着有所谓的空值。

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

5 个答案:

答案 0 :(得分:29)

非常简单:

not all(t1)
仅当False中的所有值均为非空/非零而非t1时,

才会返回Noneall短路,所以它只需要检查第一个空元素,这会使它非常快。

答案 1 :(得分:5)

提供了使用all的答案:

not all(t1)

但是在像t3这样的情况下,这将返回True,因为其中一个值为0:

t3 = (0.0, 3, 5)

'all'内置关键字检查给定iterable的所有值是否为计算为负布尔值的值(False)。 0,0.0,''和None都评估为False。

如果您只想测试无(如问题标题所示),则可行:

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

如果t3的任何元素为None,则返回True;如果没有,则返回False。

答案 2 :(得分:1)

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")

错误

答案 3 :(得分:0)

对于您的特定情况,您可以使用all()函数,它检查列表的所有值是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")

答案 4 :(得分:0)

如果有机会想检查包含这样的元组的元组中是否有空值:

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