在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
将检查是否都是空的,但事实并非如此.
它工作正常.对于a = [2]
和b = [1, 3]
,a and b
正在返回[1, 3]
这是真实的,完全如你所料,因为True and True
是True
.当您更改b
到[]
返回[]
,这是falsy,又完全按照你所期望的,因为True and False
是False
.所以if a and b
你想要的也是如此.
实际发生的and
是返回决定表达式真值的值. and
并不总是评估两个子表达式; 当第一个是假的时候,整个表达是假的,第二个不需要被评估,因此不是.这称为短路.or
表现相似(如果第一部分是真实的,则跳过评估第二部分).无论何处and
或or
能够做出决定,它都会返回该值.
另一种看待它的方式:bool(a) and bool(a) == bool(a and b)
在Python中.