Python:如何检查两个列表是否不为空
在Python中,我知道检查列表是否为空的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和
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与您原来的代码相同。