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