当前位置: 首页 > 后端技术 > Python

Python中的True和False

时间:2023-03-26 16:51:54 Python

Python中的True和False总是让人迷惑,一不小心就会出错。本文总结了三个容易出错的点,即逻辑非,if条件表达式和pandas。DataFrame.loc切片中的条件表达式。1.True和False的逻辑反转True和False的逻辑反转时,不要用~,要用not。因为在Python中,not是逻辑取反,~是按位取反。True和False对应的值为1和0,~True相当于1的按位取反,结果为-2,notTrue的结果为False。print(True)print(~True)print(notTrue)的结果为:True-2False类似,~False的结果为1,notFalse的结果为Trueprint(False)print(~False)print(notFalse)结果为:False-1True注意:在Python中,~按位取反是根据数的补码取反,即:1=>complement00000001=>~bitwiseinversion=>complement11111110=>2doublenegationTheresultissomethinglikethisprint(notnotTrue)print(~~True)print(not~True)print(~(notTrue))结果是:True1False-1doublenegationofFalseprint(notnotFalse)print(~~False)print(not~False)print(~(notFalse))结果为:False0False-22.if条件语句中的True和False在Python语言中,任意非零非空(null)if后的值为True,0或null为False。这与其他语言不同,在使用多种编程语言时很容易混淆。所以即使判断条件为负数,也会按True处理,不会执行else分支。我们看一个例子:if(-2):print('a')else:print('b')结果是:a如果用~来否定True或False,将得不到想要的结果:if(~True):#~True==-2print('a')else:print('b')结果是:a只能被not取反,达到逻辑反转的效果:ifnotTrue:print('a')else:print('b')Theresultis:negativeinb3.pandas.DataFrame.locpandas.DataFrame.loc官方文档是这么说的Accessagroupofrowsandcolumnsbylabel(s)ora布尔数组。您可以使用布尔列表作为输入,包括使用条件表达式返回布尔列表,例如:首先创建一个DataFrameimportpandasaspddf=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)]再比如,过滤掉索引中不包含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])结果是TrueFalseTruedtype:bool如果你使用~来反转数字pd.Series,它是按位反转~pd.Series([1,2,3])结果是-2-3-4dtype:int64总结在Python中,进行True和False的逻辑反转时,不用~,用not。在if条件中,任何非零和非空(null)为True,0或null为False。在pandas.DataFrame.loc的切片操作中,重载了~运算符,这与原生Python中的含义不同。我的Python版本>>>importsys>>>print(sys.version)3.7.6(默认,2020年1月8日,13:42:34)[Clang4.0.1(tags/RELEASE_401/final)]