检查元组在 Python 中是否有任何 empty/None 值的最佳方法是什么?
What is the best way to check if a tuple has any empty/None values in Python?
检查所有元组值的best/most有效方法是什么?我需要遍历所有元组项并检查还是有更好的方法?
例如:
t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)
检查这些元组,除t1
之外的每个元组都应该return为真,这意味着存在所谓的空值。
P.S。有这个问题:Test if tuple contains only None values with Python,但它是否只是关于 None 值
非常简单:
not all(t1)
returns False
仅当 t1
中的所有值都是 non-empty/nonzero 而不是 None
时。 all
短路,所以它只需要检查第一个空元素之前的元素,这使得它非常快。
对于您的具体情况,您可以使用 all()
函数,它检查列表的所有值是真还是假,请注意 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")
已提供使用 all 的答案:
not all(t1)
但是在像 t3 这样的情况下,这将 return 正确,因为其中一个值是 0:
t3 = (0.0, 3, 5)
'all' built-in 关键字检查给定可迭代对象的所有值是否都是计算为负布尔值 (False) 的值。 0、0.0、'' 和 None 的计算结果均为 False。
如果您只想测试 None(如问题标题所示),此方法有效:
any(map(lambda x: x is None, t3))
如果 t3 的任何元素是 None,则此 returns 为真,如果其中 none 个是,则为假。
如果有机会检查包含如下元组的元组中是否存在空值:
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))
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")
错
检查所有元组值的best/most有效方法是什么?我需要遍历所有元组项并检查还是有更好的方法?
例如:
t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)
检查这些元组,除t1
之外的每个元组都应该return为真,这意味着存在所谓的空值。
P.S。有这个问题:Test if tuple contains only None values with Python,但它是否只是关于 None 值
非常简单:
not all(t1)
returns False
仅当 t1
中的所有值都是 non-empty/nonzero 而不是 None
时。 all
短路,所以它只需要检查第一个空元素之前的元素,这使得它非常快。
对于您的具体情况,您可以使用 all()
函数,它检查列表的所有值是真还是假,请注意 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")
已提供使用 all 的答案:
not all(t1)
但是在像 t3 这样的情况下,这将 return 正确,因为其中一个值是 0:
t3 = (0.0, 3, 5)
'all' built-in 关键字检查给定可迭代对象的所有值是否都是计算为负布尔值 (False) 的值。 0、0.0、'' 和 None 的计算结果均为 False。
如果您只想测试 None(如问题标题所示),此方法有效:
any(map(lambda x: x is None, t3))
如果 t3 的任何元素是 None,则此 returns 为真,如果其中 none 个是,则为假。
如果有机会检查包含如下元组的元组中是否存在空值:
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))
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")
错