例如,如果通过以下步骤:

a = []

如何检查a是否为空?


当前回答

print('not empty' if a else 'empty')

更实用一点:

a.pop() if a else None

最短版本:

if a: a.pop() 

其他回答

受到dubiusjim解决方案的启发,我建议使用一个额外的常规检查,看看它是否可以迭代:

import collections
def is_empty(a):
    return not a and isinstance(a, collections.Iterable)

注意:如果希望排除空字符串,则字符串被认为是可迭代的add,而不是isinstance(a,(str,unicode))

测试:

>>> is_empty('sss')
False
>>> is_empty(555)
False
>>> is_empty(0)
False
>>> is_empty('')
True
>>> is_empty([3])
False
>>> is_empty([])
True
>>> is_empty({})
True
>>> is_empty(())
True

让我来到这里的是一个特殊的用例:我实际上想要一个函数来告诉我列表是否为空。我想避免在这里编写自己的函数或使用lambda表达式(因为它看起来应该足够简单):

foo = itertools.takewhile(is_not_empty, (f(x) for x in itertools.count(1)))

当然,有一种非常自然的方法:

foo = itertools.takewhile(bool, (f(x) for x in itertools.count(1)))

当然,不要在if(即if bool(L):)中使用bool,因为它是隐含的。但是,对于明确需要“不为空”作为函数的情况,bool是最佳选择。

if not a:
    print("List is empty")

使用空列表的隐含布尔性是相当Python的。

要检查列表是否为空,可以使用以下两种方法。但请记住,我们应该避免显式检查序列类型的方式(这是一种不太像Python的方式):

def enquiry(list1):
    return len(list1) == 0

# ––––––––––––––––––––––––––––––––

list1 = []

if enquiry(list1):
    print("The list isn't empty")
else:
    print("The list is Empty")

# Result: "The list is Empty".

第二种方式是一种更具Python风格的方式。这种方法是一种隐式检查方法,比前一种方法更可取。

def enquiry(list1):
    return not list1

# ––––––––––––––––––––––––––––––––

list1 = []

if enquiry(list1):
    print("The list is Empty")
else:
    print("The list isn't empty")

# Result: "The list is Empty"

我曾写道:

if isinstance(a, (list, some, other, types, i, accept)) and not a:
    do_stuff

投票结果为-1。我不确定这是否是因为读者反对这一策略,或者认为答案没有帮助。我会假装是后者,因为——无论什么叫做“蟒蛇”——这是正确的策略。除非你已经排除了,或者已经准备好处理a为False的情况,否则你需要一个比不是:更严格的测试。你可以用这样的方法:

if isinstance(a, numpy.ndarray) and not a.size:
    do_stuff
elif isinstance(a, collections.Sized) and not a:
    do_stuff

第一个测试是对上面@Mike的回答的回应。第三行也可以替换为:

elif isinstance(a, (list, tuple)) and not a:

如果您只想接受特定类型(及其子类型)的实例,或者使用:

elif isinstance(a, (list, tuple)) and not len(a):

如果不进行显式类型检查,您就可以离开,但前提是周围的上下文已经向您保证a是您准备处理的类型的值,或者如果您确定您不准备处理的那些类型将引发您准备好处理的错误(例如,如果您在未定义的值上调用len,则为TypeError)。总的来说,“蟒蛇”习俗似乎走到了最后一条路。像鸭子一样挤压它,如果它不知道如何呱呱叫,就让它养一只鸭子。不过,你仍然需要考虑你正在做什么样的假设,以及你没有准备好正确处理的案例是否真的会在正确的地方出错。Numpy数组是一个很好的例子,其中仅仅盲目地依赖len或布尔类型转换可能无法实现预期的效果。