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

a = []

如何检查a是否为空?


当前回答

您甚至可以尝试像这样使用bool()。虽然它的可读性较低,但它确实是一种简洁的方法。

    a = [1,2,3];
    print bool(a); # it will return True
    a = [];
    print bool(a); # it will return False

我喜欢这种方式,因为检查列表是否为空。

非常方便和有用。

其他回答

让我来到这里的是一个特殊的用例:我实际上想要一个函数来告诉我列表是否为空。我想避免在这里编写自己的函数或使用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是最佳选择。

受到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
print('not empty' if a else 'empty')

更实用一点:

a.pop() if a else None

最短版本:

if a: a.pop() 

我更喜欢明确地说:

if len(li) == 0:
    print('the list is empty')

通过这种方式,可以100%清楚地看出li是一个序列(列表),我们想测试它的大小。我的问题,如果不是李:。。。这给人一种错觉,认为li是一个布尔变量。

以下是检查列表是否为空的几种方法:

a = [] #the list

1) 非常简单的蟒蛇方式:

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

在Python中,空容器(如列表、元组、集合、字典、变量等)被视为False。可以简单地将列表视为谓词(返回布尔值)。True值表示它为非空。

2) 一种非常明确的方法:使用len()查找长度并检查它是否等于0:

if len(a) == 0:
    print("a is empty")

3) 或者将其与匿名空列表进行比较:

if a == []:
    print("a is empty")

4) 另一种愚蠢的方法是使用exception和iter():

try:
    next(iter(a))
    # list has elements
except StopIteration:
    print("Error: a is empty")