问题描述:
在某次网上限时做题过程中,我某个循环退出条件是i等于0同时j等于2,当时写成了
i == 0 & j == 2
导致程序无法正常退出循环。代价惨痛啊···(大概就是把c++和python混淆了的后果)
有两个原因:
1. Python里面&是位运算。具体描述可以直接搜索。
2. Python运算优先级是位运算处于较高的位置。逻辑与、或处于较低的位置。准确的说是:
&优先于==优先于and
因此
i == 0 & j == 2
等价于
i == (0 & j) == 2
参考资料:
Python 运算符优先级
https://www.jianshu.com/p/5348eb23ede3
补充:
在Pandas中对多列进行布尔运算筛选新表的过程:
df_part = df[ (df['columnA']>2.4) & (df['columnB'] <10.2) ]
这种方式挑选dataframe行的时候,要注意,&是位运算,优先级非常高,因此要给 df['columnA']>2.4 打括号。
其次,中间如果用 and, or 连接则会报错···