检查Python列表中的任何项是否为None(但包括零)

Bry*_*yan 38 python

我正在尝试进行一个简单的测试,True如果列表的任何结果都会返回None.但是,我希望0并且''不会导致返回True.

list_1 = [0, 1, None, 4]
list_2 = [0, 1, 3, 4]

any(list_1) is None
>>>False
any(list_2) is None
>>>False
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,any()在这种情况下,函数不是很有用.

Mar*_*ers 69

对于list对象可以简单地使用成员资格测试:

None in list_1
Run Code Online (Sandbox Code Playgroud)

比如any(),对a的成员资格测试list会扫描所有元素,但会在找到匹配后立即返回短路.

any()返回,TrueFalse从来没有None,所以你的any(list_1) is None测试肯定不会去任何地方.你必须传入一个生成器表达式any()来迭代,而不是:

any(elem is None for elem in list_1)
Run Code Online (Sandbox Code Playgroud)

  • 当列表包含 Numpy 数组时,这会造成麻烦。Tom Cornebize 有一个更好的解决方案。 (5认同)
  • @frankliuao:但在 numpy 数组上,您可能希望在任何情况下使用 [`numpy.any()`](https://docs.scipy.org/doc/numpy/reference/ generated/numpy.any.html) ,并且不将“None”对象存储在数值数组中。 (2认同)

Tom*_*ize 9

list_1 = [0, 1, None, 4]

list_2 = [0, 1, 3, 4]

any(x is None for x in list_1)
>>>True

any(x is None for x in list_2)
>>>False
Run Code Online (Sandbox Code Playgroud)