Python:如何检查两个列表是否为空

时间:2015-05-27 16:18:54

标签: python list

在Python中,我知道检查列表是否为空的pythonic方法是

if not a:
    # do things with empty list

要检查列表是否为空,我们会这样做:

if a:
    # do things with my list

如果两个列表不为空,我们如何同时检查(如同读取)?

if a and b:
    # do things with my two lists

以上似乎不起作用,我不确定(a and b)实际上意味着什么。对于a = [2]b = [1,3](a and b) = [1,3]and运算符实际在这里做什么?如果我在某个时候最终减少b = [](a and b) = []即使a不为空。

编辑:我的用例类似于

while (a and b are not empty):
    modify a
    modify b

我会天真地认为,由于if a检查列表是否为空,if a and b会检查两者是否为空,但事实并非如此。

6 个答案:

答案 0 :(得分:7)

它工作正常。对于a = [2]b = [1, 3]a and b返回[1, 3]这是真实的,完全如您所料,因为True and TrueTrue。当您将b更改为[]时,它会返回[],这是假的,再次完全符合您的预期,因为True and FalseFalse。所以if a and b完全符合您的要求。

实际发生的是and返回决定表达式真值的值。 and并不总是评估两个子表达式;当第一个是假的时候,整个表达是假的,第二个不需要评估,因此不是。这称为短路。 or表现相似(如果第一部分是真实的,则跳过评估第二部分)。只要andor能够做出决定,它就会返回该值。

另一种看待它的方式:Python中的bool(a) and bool(a) == bool(a and b)

答案 1 :(得分:2)

a and b是正确的。

如果第一个参数为真,

and将返回第二个参数。

答案 2 :(得分:1)

你可以这样做

if len(a) and len(b):
    #do something

答案 3 :(得分:0)

我认为你想要的是

>>> a, b = list(), list()
>>> while not (a and b):
...    a.append(1)
...    b.append(2)
...
>>> a, b
([1], [2])
>>>

答案 4 :(得分:0)

and运算符比较两个布尔值

    bool([]) == False

所以[] and b总是返回[];无论b是什么。

答案 5 :(得分:0)

要基于kindall的答案-您还可以在进行真实性测试之前将列表连接起来:

a = []
b = []
c = [1]
bool(a + b)  # False
bool(a + b + c)  # True

如果您在重要的事情上做,这当然会带来性能损失。