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

检查Python列表中的任何项是否为None(但包括零),python,Python,我试图做一个简单的测试,如果列表的任何结果是None,则返回True。但是,我希望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 如您所见,any()函数在这种情况下没有任何帮助 对于列表对象,可以简单地使用成员资格测试: None in list_1 与any()一

我试图做一个简单的测试,如果列表的任何结果是
None
,则返回
True
。但是,我希望
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

如您所见,
any()
函数在这种情况下没有任何帮助

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

None in list_1
any()
一样,
列表上的成员资格测试将扫描除短路以外的所有元素,只要找到匹配项就返回

any()
返回
True
False
,从不
None
,因此您的
any(列表1)是None
测试肯定不会有结果。您必须为
any()
传入一个生成器表达式才能进行迭代,而不是:

any(elem is None for elem in list_1)

如果iterable的任何元素为True,那么任何
都会返回True。如果iterable为空,则返回False。
因此,这确实不是正确的选择use@d6bels不完全是。这是
any()
的一个非常自然的用例,您只需要将它与生成器表达式结合起来<在这种情况下,
列表1
实际上是一个
列表
-在某些情况下,它可能是一个没有
\uuu包含
实现的任意iterable,在这种情况下,
any()
解决方案将是最好的选择。当列表包含Numpy数组时,这将产生问题。Tom Cornebize有一个更好的解决方案。@frankliuao:但在numpy数组中,您可能无论如何都想使用,而不是在数值数组中存储
None
对象。@CharlieParker:您必须要么编写一个自定义函数,使用递归或堆栈来执行相同的操作。请注意,当前代码意味着“如果我调用
any
的结果恰好是
None
”(假设它将返回
True
False
引发一个异常,则永远不会发生)。如果它是递归的呢?例如
None,[(None,None),None]
如果任何层次结构为无,则应返回true。如果其递归,则会如何?例如,
无,[(无,无),无]
如果任何层次结构为无,则应返回true。
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