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

Python:如何检查两个列表是否不为空,python,list,Python,List,在Python中,我知道检查列表是否为空的Python方法是 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和b)的实际含义。对于a=[2],b=[1,3],(a和

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

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和b)
的实际含义。对于
a=[2]
b=[1,3]
(a和b)=[1,3]
操作员在这里实际做什么?如果我在某一点上减少了
b=[]
(a和b)=[]
,即使
a
不是空的

编辑:我的用例是这样的

while (a and b are not empty):
    modify a
    modify b
我会天真地认为,既然
如果a
检查列表是否为空,那么
如果a和b
将检查两者是否均为空,事实并非如此。

你可以这样做

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

a和b
正确


如果第一个参数为真,则返回第二个参数。

它工作正常。对于
a=[2]
b=[1,3]
a和b
返回
[1,3]
,这是真实的,正如您所期望的,因为
True和True
True
。当您将
b
更改为
[]
时,它会返回
[]
,这是错误的,正如您所期望的一样,因为
True和False
False
。因此,如果a和b完全按照您的要求执行,则

实际发生的是,
返回决定表达式真实性的值
并不总是计算这两个子表达式;当第一个表达式为falsy时,整个表达式为falsy,第二个表达式不需要求值,因此不需要求值。这叫做短路
的行为类似(如果第一部分是真实的,则跳过评估第二部分)。只要
能够做出决定,它就会返回该值


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

我想你想要的是

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

运算符用于比较两个布尔值

    bool([]) == False

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

以kindall的答案为基础,您也可以在进行真实性测试之前将列表串联起来:

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

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

你说“不……工作”的意思可能重复?我很难理解,
如果a和b:
只有在两者都不为空的情况下才是真的。我会将问题编辑得更简洁,并查看重复的内容。这一个很难搜索,因为“and”通常没有索引。
如果a和b检查两个列表是否都为空。如果你看到的东西看起来不一样,你的问题就在你的循环中,而不是条件。我已经考虑过这一点,但我想知道是否有更接近
a和b的东西。如果没有,我就接受了,但我仍然想知道操作员在这里实际做什么。你能举一个例子,如果a和b:
,这与
有不同的行为吗?@Kevin,应该有这样的情况吗?@PeterdGlopper这是有效的,因为
如果a和b
有效。这与a和b的
完全相同,只是更长一些。@ForceBru,如果没有这种情况,那么为什么要在a和b的
上使用它呢:
?第二条注释,而true仅在if之外有意义(如赋值)。感谢您的解释,这很有意义。有没有比检查长度更好的方法来检查两个是否为空?是的<代码>如果a和b与您原来的代码相同。