-
-
Tips:使用关键字and/or与使用逻辑操作运算符&/|
今天我们来补充一个python的小知识点,and/or 关键字到底和逻辑操作运算符&/|有什么区别
它们的主要区别在于:and 和 or判断整个对象是真是假,而& 和 | 是指每个对象中的比特位。
当你使用and 或 or的时候,就等于让python将这个对象当作整个布尔实体、在python中,所有非零的整数都会被当做是True:
bool(42), bool(0) (True, False) bool(42 and 0) False bool(42 or 0) True
而当你对整数使用&和| 时,表达式操作的是元素的比特,将and或or应用于组成该数字的每个比特:
bin(42) bin(59) bin(42 & 59) bin(42 | 59)
请注意,& 和 I 运算时,对应的二进制比特位进行比较以得到最终结果。
-
当你在Numpy中有一个布尔数组时,该数组可以被当做是由比特字符组成的,其中1=True、0=False。这样的数组可以用上面介绍的方式进行&和| 的操作:
A=np.array([1,0,1,0,1,0],dtype=bool)
B=np.array([1,1,1,0,1,1],dtype=bool)
A | B
array([True, True, True, False ,True, True],dtype=bool)
这样就可以很完美的支持数组的逐元素比较。
而用or来计算这两个数组时,python会计算整个数组对象的真或假,这当然会导致程序出错。
同样,对给定数组进行逻辑运算时,也应该使用 | 或 &。
结论:and 和 or 对整个对象执行单个布尔运算,而 & 和 | 对一个对象的内容(单个比特或字节) 执行多个布尔运算。 对于Numpy布尔数组,后者是常用的操作。