Python中True(真)和False(假)判断详解
作者:厦门在乎科技 发布时间:2021-12-16 11:22:36
前言
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


猜你喜欢
- openpyxl特点openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容
- 首先比较下return 与 yield的区别:return:在程序函数中返回某个值,返回之后函数不在继续执行,彻底结束。yield: 带有y
- 阅读本文需要有其他语言的编程经验。在 JavaScript 中数组是对象(而非线性分配的内存)。通过数组 literal 来创建数组:var
- 昨日晚平台升级,我们成功送BUG上线,今天系统问题又多了起来,大多数时候的运维问题需要根据业务反馈的#订单号# 查询到当前状态,然后再进行反
- 简介Simon Willison来自英国,是一名经验丰富的开发人员。曾工作于Yahoo,是Web开发框架Django的创始人之一,也是Ope
- js获取日期函数//获取当前时间日期function CurentTime(){ var now = new Date(); &
- --分页存储过程示例 Alter PROCEDURE [dbo].[JH_PageDemo] @pageSize int = 9000000
- 本文要介绍的爬虫是抓取暴走漫画上的GIF趣图,方便离线观看。爬虫用的是python3.3开发的,主要用到了urllib、request和Be
- 事务日志记录着在相关数据库上的操作,同时还存储数据库恢复(recovery)的相关信息。收缩日志的原因有很多种,有些是考虑空间不足,有些则是
- 本文为大家分享了python链表的基础概念和基础用法,供大家参考,具体内容如下一、什么是链表链表是由多个不同的节点组成,每个节点通过指针区域
- 如何在页面错误时向数据库中添加记录?在ASP中,我在页面中添加了On Error Resume Next错误命令,以消除和避免程序错误。现在
- 什么是XML?XML 指可扩展标记语言(eXtensibleMarkupLanguage)。 你可以通过本站学习XML教程XML 被设计用来
- 使用TensorFlow的一个优势是,它可以维护操作状态和基于反向传播自动地更新模型变量。 TensorFlow通过计算图来更新变量和最小化
- 什么是Css Hack?由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla
- 一、Python字符编码介绍1、须知:在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicodeunico
- 当我们需要批量删除数据库中的表时,对于单个删除一些表是否感到烦躁,厌倦,干脆写个脚本用得了。本脚本使用游标循环删除,对于数量比较小,用游标暂
- 今天的博客是直接来源于我自己的个人工具函数库。过去几个月,有些PyImageSearch读者电邮问我:“如何获取URL指向的图片并将其转换成
- 本文实例讲述了mysql外键基本功能与用法。分享给大家供大家参考,具体如下:本文内容:什么是外键外键的增加外键的修改和删除外键的约束模式首发
- Python3的 元组(Tuple)Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号 ( ),列表使用方括号
- 一.链接打开方式1、新窗口打开优点:用户点链接的时候,当前浏览的内容不会被替换,不需要通过前进、后退去看自己看过的内容;缺点:访问一会,就会