Python中and和or的使用,list/字符串之间的and 和 or的使用
在我的一次写代码过程中,我本来想判断两个列表是否都为空,如果两个列表都为空,则返回False,如果有任意一个不为空,就返回True;
于是我写了如下代码,return list1 and list2,结果如果两个列表都为空,返回的是[],我发现python列表之间使用and和or并不像我想象的那样返回True或False。
0. 写在前面,具体原理看后续的内容
如果想实现上述功能,可用下列代码:
1.
return (list1 == [] and list2 == [])
# 或者
2.
return not(list1 or list2)
1. and 在列表/字符串之间的运行规则
用法解释:多个表达式(列表、字符串等对象,这里不太会描述,意思理解即可)之间进行的and操作:
1. 如果表达式全为真,则返回最后一个真的表达式;
2. 如果存在真,返回第一个假,并且假后面的表示式不进行再判断
理解起来,常说and操作:一假为假,所以存在假的时候,一定为假。只有所有都是真的时候才是真
该博文介绍了Python中常见的假的表示: Python真和假
1.1 存在假
表达式存在假,返回的是第一个假
print(0 and [] and '') # 第一个假为0
print(1 and [] and '1') # 第一个假为[]
输出结果:
0
[]
1.2 全为真
表达式全为真,返回最后一个真
print(1 and '3' and [3])
----------------
[3]
1.3 验证:当存在假的时候,不继续向后判断其他的表达式
可以看出,list1是没有索引1的,如果下列表达式全部检测完,应该会报错,但是没有,是因为[]为假,找到第一个为假的直接返回
list1 = []
print(1 and [] and list1[1])
----------------
[]
2. or 操作
用法解释:
表达式存在真的时候,返回第一个真,并且后续表达式不再验证
当表达式全为假的时候,返回最后一个假。
理解:or操作是一真为真,所以找到一个真就说明全为真,直接进行返回找到的第一个真就行了。只有全为假的时候才为假
2.1 存在真
始终返回找到的第一个真
print(1 or [] or '9')
print([] or [1] or '10')
----------
1
[1]
2.2 全为假
返回最后一个假。注意: 5 == 6 表示的是False
print(0 or '' or [])
print(0 or [] or 5==6)
-----------------
[]
False
2.3 测试找到一个真之后不进行后续的检测
同and操作的检测方法
list1 = []
print(1 or [] or list1[1])
-------------
1
最后
如果想实现我本来的功能,可以使用如下代码:
方式1 是直接判断两个列表都为空,只有都为空的时候才是True
方式2 同理,or 一真为真,只有两个都是空的时候,表达式结果为[ ],再加个not就是True
1.
return (list1 == [] and list2 == [])
# 或者
2.
return not(list1 or list2)
3 参考文献
除此之外还有and-or用法,他就是按照and和or的规则,进行依次判断,知道了上面的原理就可以自行领会了
python中and和or的区别-Python中and-or语法