Python中True(真)和False(假)判斷詳解
前言
Python中的 True和 False總是讓人困惑,一不小心就會用錯,本文總結(jié)了三個易錯點,分別是邏輯取反、if條件式和pandas.DataFrame.loc切片中的條件式。
1.True和False的邏輯取反
在對True和False進行邏輯取反時,不使用~,而要使用not。
因為在Python中,not才是邏輯取反,而~是按位取反。True和False對應(yīng)的數(shù)值是1和0,~True就相當于對1按位取反,結(jié)果是-2,not True的結(jié)果才是False。
print(True) print(~True) print(not True)
結(jié)果是:
True
-2
False
類似的,~False的結(jié)果是1,not False 的結(jié)果才是True
print(False) print(~False) print(not False)
結(jié)果是:
False
-1
True
注:Python中 ~ 按位取反是按照數(shù)的補碼取反,即:
1 => 補碼00000001 => ~按位取反 => 補碼11111110 => 2
雙重否定的結(jié)果是這樣的
print(not not True) print(~~True) print(not ~True) print(~(not True))
結(jié)果為:
True
1
False
-1
對False的雙重否定
print(not not False) print(~~False) print(not ~False) print(~(not False))
結(jié)果為:
False
0
False
-2
2.if條件語句中的True和False
Python語言中,if后任何非0和非空(null)值為True,0或者null為False。這點和其他語言不相同,使用多種編程語言時很容易混淆。所以即使判斷條件是一個負數(shù),也是按照True處理,不會執(zhí)行else分支。來看例子:
if (-2): print('a') else: print('b')
結(jié)果為:a
如果使用了~對True或False取反,則得不到想要的結(jié)果:
if (~True): # ~True == -2 print('a') else: print('b')
結(jié)果為:a
只有用not來取反,才能達到邏輯取反的效果:
if not True: print('a') else: print('b')
結(jié)果為:b
3.pandas.DataFrame.loc 中的否定
pandas.DataFrame.loc 官方文檔中是這么說的
Access a group of rows and columns by label(s) or a boolean array.
可以使用布爾列表作為輸入,包括使用一個條件式來返回一個布爾列表,例:
首先創(chuàng)建一個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的數(shù)據(jù)
df.loc[df['shield'] > 6]
?篩選出shield域小于等于6的數(shù)據(jù),可以
df.loc[df['shield'] <= 6]
也可以用
~ df.loc[~(df['shield'] > 6)]
另一個例子,篩選出index中不包含er兩個字母的數(shù)據(jù)
df.loc[~df.index.str.contains('er')]
需要注意的是,在這里使用df.index.str.contains('er')作為條件篩選時,返回的是pd.Series。
而在pd.Series中, ~操作符重載了,它對布爾類型數(shù)據(jù)和對數(shù)值類型數(shù)據(jù)的處理分別是邏輯取反和按位取反。
df.index.str.contains('er')
的結(jié)果是:
array([False, True, True])
對布爾類型的pd.Series使用~取反,是邏輯取反
~pd.Series([False, True, False])
結(jié)果為
True
False
True
dtype: bool
而如果對數(shù)值型的pd.Series使用~取反,則是按位取反
~pd.Series([1,2,3])
結(jié)果為
-2
-3
-4
dtype: int64
總結(jié)
到此這篇關(guān)于Python中True(真)和False(假)判斷的文章就介紹到這了,更多相關(guān)Python True和False詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)在Linux系統(tǒng)下更改當前進程運行用戶
這篇文章主要介紹了Python實現(xiàn)在Linux系統(tǒng)下更改當前進程運行用戶,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-02-02詳解OpenCV自適應(yīng)直方圖均衡化的應(yīng)用
在本文中,將介紹如何應(yīng)用對比度受限的自適應(yīng)直方圖均衡化 ( Contrast Limited Adaptive Histogram Equalization, CLAHE ) 來均衡圖像,需要的可以參考一下2022-02-02Python處理數(shù)據(jù)之匹配兩個Excel文件數(shù)據(jù)的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Python處理數(shù)據(jù)之匹配兩個Excel文件數(shù)據(jù)的實現(xiàn)方法,可以使用Python的Pandas庫來實現(xiàn)兩層循環(huán)匹配兩個Excel文件,需要的朋友可以參考下2023-09-09python網(wǎng)絡(luò)編程之讀取網(wǎng)站根目錄實例
這篇文章主要介紹了python網(wǎng)絡(luò)編程之讀取網(wǎng)站根目錄實例,以quux.org站根目錄為例進行了實例分析,代碼簡單易懂,需要的朋友可以參考下2014-09-09