【问题标题】:What is the best way to check if a tuple has any empty/None values in Python?检查元组在 Python 中是否有任何空/无值的最佳方法是什么?
【发布时间】:2015-07-01 06:49:50
【问题描述】:

检查所有元组值是否最好/最有效的方法是什么?我是否需要遍历所有元组项并进行检查,还是有更好的方法?

例如:

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

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

附:有这个问题:Test if tuple contains only None values with Python,但它只是关于 None 值

【问题讨论】:

  • 哦,这样就行了:)

标签: python tuples is-empty


【解决方案1】:

很简单:

not all(t1)

仅当t1 中的所有值都非空/非零且不是None 时才返回Falseall 短路,所以它只需要检查元素直到第一个空元素,这使得它非常快。

【讨论】:

  • 也适用于namedtuple(当然,因为它是一个子类)=)
  • @TimPietzcke 我认为它还会检查 False(布尔)值,如果元组中的值之一是 False all(t1) 将返回 False
  • @sau:是的,False 0
【解决方案2】:

已提供使用 all 的答案:

not all(t1)

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

t3 = (0.0, 3, 5)

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

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

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

如果 t3 的任何元素为 None,则返回 True,如果都不是,则返回 False。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      对于你的具体情况,你可以使用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")
      

      【讨论】:

        【解决方案5】:
        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")
        

        错误

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-22
          • 2015-08-23
          • 2020-12-08
          • 2021-06-23
          • 1970-01-01
          • 2017-06-05
          • 2014-12-20
          • 1970-01-01
          相关资源
          最近更新 更多