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

在Python中,检查元组是否有空/无值的最佳方法是什么?,python,tuples,is-empty,Python,Tuples,Is Empty,检查是否所有元组值的最佳/最有效方法是什么?我是否需要迭代所有元组项并检查,还是有更好的方法 例如: t1 = (1, 2, 'abc') t2 = ('', 2, 3) t3 = (0.0, 3, 5) t4 = (4, 3, None) 检查这些元组,除了t1之外的每个元组都应该返回True,这意味着存在所谓的空值 还有一个问题:,但这只是关于无值的问题吗?这很容易: not all(t1) 仅当t1中的所有值均为非空/非零且不是None时,才返回Falseall短路,因此它只需检查第一

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

例如:

t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)
检查这些元组,除了
t1
之外的每个元组都应该返回True,这意味着存在所谓的空值

还有一个问题:,但这只是关于无值的问题吗?

这很容易:

not all(t1)

仅当
t1
中的所有值均为非空/非零且不是
None
时,才返回
False
all
短路,因此它只需检查第一个空元素,这使其速度非常快。

对于您的特定情况,您可以使用
all()
函数,它检查列表中的所有值是否为真,请注意在python中
None
,空字符串和
0
都被视为假

所以-


已提供使用all的答案:

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

t3 = (0.0, 3, 5)
“all”内置关键字检查给定iterable的所有值是否都是计算为负布尔值(False)的值。0、0.0、“”和“无”都计算为False

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

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

如果t3的任何元素都不存在,则返回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))
否则,如果您想知道是否至少有一个正值,请使用以下命令:

not all(map(lambda x: all(x), t1))
any(map(lambda x: any(x), t1))
真的

假的

真的

假的

真的


False

噢,那就可以了:)也适用于
namedtuple
(因为它当然是一个子类)=@TimPietzcke我想它也会检查False(布尔)值,如果tuple中的一个值为False,那么所有(t1)都会返回False@sau:是,
False
0
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")