最简洁的方法来检查列表是空的还是只包含None?

时间:2009-08-13 09:13:24

标签: python list types

检查列表是否为空或仅包含无的最简洁方法?

我明白我可以测试:

if MyList:
    pass

if not MyList:
    pass

但是如果列表中有一个项目(或多个项目),但那些项目是无:

MyList = [None, None, None]
if ???:
    pass

4 个答案:

答案 0 :(得分:15)

一种方法是使用all和列表理解:

if all(e is None for e in myList):
    print('all empty or None')

这也适用于空列表。更一般地说,要测试列表是否只包含评估为False的内容,您可以使用any

if not any(myList):
    print('all empty or evaluating to False')

答案 1 :(得分:9)

您可以使用all()函数来测试所有元素都是None:

a = []
b = [None, None, None]
all(e is None for e in a) # True
all(e is None for e in b) # True

答案 2 :(得分:4)

您可以直接将列表与==进行比较:

if x == [None,None,None]:

if x == [1,2,3]

答案 3 :(得分:2)

如果您关注列表中评估为true的元素:

if mylist and filter(None, mylist):
    print "List is not empty and contains some true values"
else:
    print "Either list is empty, or it contains no true values"

如果您想严格检查None,请在上面的filter(lambda x: x is not None, mylist)声明中使用filter(None, mylist)代替if