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

drg*_*ove 6 python list

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

if not a:
    # do things with empty list
Run Code Online (Sandbox Code Playgroud)

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

if a:
    # do things with my list
Run Code Online (Sandbox Code Playgroud)

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

if a and b:
    # do things with my two lists
Run Code Online (Sandbox Code Playgroud)

以上似乎不起作用,我不确定(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
Run Code Online (Sandbox Code Playgroud)

我会天真地认为,既然if a检查列表是否为空,if a and b将检查是否都是空的,但事实并非如此.

kin*_*all 7

它工作正常.对于a = [2]b = [1, 3],a and b正在返回[1, 3]这是真实的,完全如你所料,因为True and TrueTrue.当您更改b[]返回[],这是falsy,又完全按照你所期望的,因为True and FalseFalse.所以if a and b你想要的也是如此.

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

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

  • 是.`如果a和b`就像你原来的那样. (2认同)