Python中True(真)和False(假)判断详解

目录
  • 前言
  • 1.True和False的逻辑取反
  • 2.if条件语句中的True和False
  • 3.pandas.DataFrame.loc 中的否定
  • 总结

前言

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

总结

到此这篇关于Python中True(真)和False(假)判断的文章就介绍到这了,更多相关Python True和False详解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python中的True,False条件判断实例分析

    本文实例讲述了Python中的True,False条件判断用法.分享给大家供大家参考.具体分析如下: 对于有编程经验的程序员们都知道条件语句的写法: 以C++为例: 复制代码 代码如下: if (condition)  {      doSomething();  } 对于Python中的条件判断语句的写法则是下面的样子: 复制代码 代码如下: if (condition):      doSomething() 那么对于条件语句中的condition什么时候为真什么时候为假呢? 在C++/Ja

  • Python返回真假值(True or False)小技巧

    在昨天关于substring的blog中有如下一段代码: 也许你已经发现,在Python 3中其实有办法只用一行完成函数: 复制代码 代码如下: >>> def isSubstring2(s1,s2):  return True if s2.find(s1)!=-1 else False 但是...还可以更简单吗? 如何更简单使用Python表达条件语句呢,just for fun :) 一种做法是使用列表索引: 复制代码 代码如下: >>> def isSubstri

  • Python解惑之True和False详解

    前言 众所周知在Python 中常用的数据类型bool(布尔)类型的实例对象(值)就两个,真和假,分别用True和False表示.在if 条件判断和while 语句中经常用到,不过在Python2.x 中,True 和False 却有着奇怪的用法,就是真假可以相互被替换 先看下面代码: >>> True True >>> False False >>> if True: ... print True ... True >>> if n

  • Python中True(真)和False(假)判断详解

    目录 前言 1.True和False的逻辑取反 2.if条件语句中的True和False 3.pandas.DataFrame.loc 中的否定 总结 前言 Python中的 True和 False总是让人困惑,一不小心就会用错,本文总结了三个易错点,分别是逻辑取反.if条件式和pandas.DataFrame.loc切片中的条件式. 1.True和False的逻辑取反 在对True和False进行逻辑取反时,不使用~,而要使用not. 因为在Python中,not才是逻辑取反,而~是按位取反.

  • 对python中的 os.mkdir和os.mkdirs详解

    创建目录 在Python中可以使用os.mkdir()函数创建目录(创建一级目录). 其原型如下所示: os.mkdir(path) 其参数path 为要创建目录的路径. 例如要在D盘下创建hello的目录 >>> import os >>> os.mkdir('d:\hello') 可以使用os.makedirs()函数创建多级目录. 其原型如下所示: os.makedirs(path) 其参数path 为要创建目录的路径. 如在D盘下创建books的目录,books

  • 基于Python中isfile函数和isdir函数使用详解

    Python编程语言判断是否是目录 在Python编程语言中可以使用os.path.isdir()函数判断某一路径是否为目录.其函数原型如下所示. os.path.isdir(path) 参数含义如下. path:要进行判断的路径.以下实例判断E:\MJlife\test是否为目录. >>>import os >>>os.path.isdir('E:\\MJlife\\test') 判断是否为目录的输出结果 True 表示H:\MJlife\test是目录. Pytho

  • Python 中的函数装饰器和闭包详解

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回,也可以将其替换为另一个函数或者可调用对象. 例如:有个名为 decorate 的装饰器: @decorate def target(): print('running target()') 上述代码的写法和以下写法的效果是一样的: def target(): print('running targe

  • Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算. sets 支持 x in set, len(set),和 for x in set.作为一个无序的集合,sets不记录元素位

  • Python中filter与lambda的结合使用详解

    filter是Python的内置方法. 官方定义是: filter(function or None, sequence) -> list, tuple, or string Return those items of sequence for which function(item) is true. If function is None, return the items that are true. If sequence is a tuple or string, return the

  • Python中常用的高阶函数实例详解

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. lambda 当在使用一些函数的时候,我们不需要显式定义函数名称,直接传入lambda匿名函数即可.lambda匿名函数通常和其他函数搭配使用. 比如可以直接使用如下的lambda表达式计算当x=3时,y = x * 3 + 5的函数值. In [1]: (lambda x: x * 3 + 5)(3) Out[1]: 14 map map函数将一个函数和序列/迭代器(可以传

  • Python中可变变量与不可变变量详解

    目录 一 .常见的变量分类 1.变量的创建 二.变量分类 1..常见的不可变变量 2.常见的可变变量 三.拷贝的差别 四.参数传递的差别 前言: C++不同于Python的显著特点,就是有指针和引用,这让我们在调用参数的时候更加清晰明朗.但Python中没有指针和引用的概念,导致很多时候参数的传递和调用的时候会产生疑问:我到底是复制了一份新的做操作还是在它指向的内存操作? 这个问题根本上和可变.不可变变量有关,我想把这个二者的区别和联系做一个总结,以更深入地理解Python内部的操作.我本身非科

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • python中的迭代器,生成器与装饰器详解

    目录 迭代器 生成器 装饰器 总结 迭代器 每一个可迭代类内部都要实现__iter__()方法,返回一个迭代类对象,迭代类对象则定义了这个可迭代类如何迭代. for循环调用list本质上是是调用了list的迭代器进行迭代. # 对list进行for循环本质上是调用了list的迭代器 list = [1,2,3,4] # for 循环调用 for elem in list: print(elem) # 迭代器调用 list_iter = list.__iter__() while True: tr

随机推荐