在Python中(& , |)和(and , or)
是两组比较相似的运算符,相应的表示”与“和”或“,
基本格式:
a & b a | b
a and b a or b
很多小伙伴会萌萌的分不清他们之间的区别。
其实很简单,如果a和b是数值变量
,则&和 | 表示位运算,而and 和 or 根据是否非0来决定输出。
# &,|:
1 & 2 #结果为0
1 | 2 #结果为3
#2在二进制里面是10,1在二进制中是01,那么01与运算10得到是0,或运算得到3
# and,or:
# 判断变量是否为0, 是0则为False,非0判断为True,
# and中含0,返回0; 均为非0时,返回后一个值,
2 and 0 # 返回0
2 and 1 # 返回1
1 and 2 # 返回2
# or中, 至少有一个非0时,返回第一个非0,
2 or 0 # 返回2
2 or 1 # 返回2
0 or 1 # 返回1
如果a和b是逻辑变量
,则两者用法基本一致
In[1]:(3>0) | (3<1)
Out[1]: True
In[2]:(3>0) and (3<1)
Out[2]: False
In[3]:(3>0) or (3<1)
Out[3]: True
In[4]:(3>0) & (3<1)
Out[4]: False
此外要注意的是当在pandas中DataFrame
的切片过程,要注意逻辑变量的使用,
需要求得满足多个逻辑条件的数据时,要使用& 和|,在某些条件下用and/ or会报错。
具体可以参考我之前写的pandas中loc和iloc方法中的第四条(利用loc根据某个条件提取行)
#提取A列大于5且B列小于10
df.loc[(df['A'] > 5) & (df['B'] < 10)]