網站首頁 編程語言 正文
前言
Python中的 True和 False總是讓人困惑,一不小心就會用錯,本文總結了三個易錯點,分別是邏輯取反、if條件式和pandas.DataFrame.loc切片中的條件式。
1.True和False的邏輯取反
在對True和False進行邏輯取反時,不使用~,而要使用not。
因為在Python中,not才是邏輯取反,而~是按位取反。True和False對應的數值是1和0,~True就相當于對1按位取反,結果是-2,not True的結果才是False。
print(True)
print(~True)
print(not True)
結果是:
True
-2
False
類似的,~False的結果是1,not False 的結果才是True
print(False)
print(~False)
print(not False)
結果是:
False
-1
True
注:Python中 ~ 按位取反是按照數的補碼取反,即:
1 => 補碼00000001 => ~按位取反 => 補碼11111110 => 2
雙重否定的結果是這樣的
print(not not True)
print(~~True)
print(not ~True)
print(~(not True))
結果為:
True
1
False
-1
對False的雙重否定
print(not not False)
print(~~False)
print(not ~False)
print(~(not False))
結果為:
False
0
False
-2
2.if條件語句中的True和False
Python語言中,if后任何非0和非空(null)值為True,0或者null為False。這點和其他語言不相同,使用多種編程語言時很容易混淆。所以即使判斷條件是一個負數,也是按照True處理,不會執行else分支。來看例子:
if (-2):
print('a')
else:
print('b')
結果為:a
如果使用了~對True或False取反,則得不到想要的結果:
if (~True): # ~True == -2
print('a')
else:
print('b')
結果為:a
只有用not來取反,才能達到邏輯取反的效果:
if not True:
print('a')
else:
print('b')
結果為:b
3.pandas.DataFrame.loc 中的否定
pandas.DataFrame.loc 官方文檔中是這么說的
Access a group of rows and columns by label(s) or a boolean array.
可以使用布爾列表作為輸入,包括使用一個條件式來返回一個布爾列表,例:
首先創建一個DataFrame
import pandas as pd
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
index=['cobra', 'viper', 'sidewinder'],
columns=['max_speed', 'shield'])
df
使用條件式來篩選出shield大于6的數據
df.loc[df['shield'] > 6]
?篩選出shield域小于等于6的數據,可以
df.loc[df['shield'] <= 6]
也可以用
~ df.loc[~(df['shield'] > 6)]
另一個例子,篩選出index中不包含er兩個字母的數據
df.loc[~df.index.str.contains('er')]
需要注意的是,在這里使用df.index.str.contains('er')作為條件篩選時,返回的是pd.Series。
而在pd.Series中, ~操作符重載了,它對布爾類型數據和對數值類型數據的處理分別是邏輯取反和按位取反。
df.index.str.contains('er')
的結果是:
array([False, True, True])
對布爾類型的pd.Series使用~取反,是邏輯取反
~pd.Series([False, True, False])
結果為
True
False
True
dtype: bool
而如果對數值型的pd.Series使用~取反,則是按位取反
~pd.Series([1,2,3])
結果為
-2
-3
-4
dtype: int64
總結
原文鏈接:https://blog.csdn.net/weixin_41996102/article/details/119538705
相關推薦
- 2022-10-24 C++??STL?_?Vector使用及模擬實現_C 語言
- 2022-04-10 el-input當type=number時只能輸入數字
- 2022-03-03 element樹組件父子關聯
- 2022-05-11 兩分鐘完成創建virtualbox創建k8s集群詳解
- 2022-11-18 Shell實現批量操作文件的方法詳解_linux shell
- 2022-06-07 Python?Numpy庫的超詳細教程_python
- 2023-07-05 uni-app滾動分頁 兼容(App 小程序 H5)
- 2022-12-29 淺析Python是如何實現集合的_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支