查看原文
其他

Python中的这些运算符你真的会用吗?

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王子一,中南财经政法大学金融学院

文字编辑:方   言 

技术总编:张馨月

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营在不久前已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!     
在我们平时敲代码时常常要用到各种各样的运算符,比如常见的算数运算和赋值运算,不过当中可能有一些经常忽略的细节,比如is==是否可以互相代替?and&一样吗?这些符号分别对应着Python中的身份运算符、比较运算符、逻辑运算符和位运算符,今天我们就来通过两个小案例一起学习吧!
  • 案例1-is==是否可以互相代替?

可以看到,b is a输出结果为False,而b==a输出的结果为True。

==is分别对应于比较运算符和身份运算符,在解答之前,我们先了解一下这两类运算符。

比较运算

比较运算符用于解决两个对象之间的比较大小的问题,输出的结果为True和False,具体符号如下表所列:
运算符描述
==判断两个对象是否相等,真为True,假为False
!=判断两个对象是否不相等,结果表示同上
> < >= <=判断大小
比较运算符在数值型的计算中应用非常广泛,同时,我们也可以在字符串和列表里进行比较,演示如下:
print(4!=5) #判断a与b是否相等print("abc" < "aba") # 逐个比较两个字符串相应位置字符的ASCII码大小print("abc" == "abc") # 比较两个字符串的内容是否相同print([1,2,3] == [1,2,3,4]) #比较两个列表的内容是否相同print([1,2,3] > [1,3,'a']) #逐个比较两个列表相应位置元素的ASCII码大小
输出结果为:

身份运算

  身份运算用于比较两个对象的存储单元,表示两个对象是否储存在一个单元里,其运算符如下:

运算符描述
is判断两个标识符是不是引用自一个对象
is not判断两个标识符是不是引用自不同对象
以下实例演示了身份运算符的操作:

了解完两种运算符后,我们可以解答开头提到的问题。==是比较运算符,用于判断二者是否相等;is是身份运算符,用于判断二者是否相同。

更具体来说, == 会判断引用变量的值是否相等,is判断两个变量引用对象是否为同一块内存空间

上述例子中,a,b的形式相同,但是存储位置不同,所以输出结果不同。

如果我们直接令b=a再进行判断,输出结果便都变为True,如下所示:
  • 案例2-and&傻傻分不清楚?

可以看到a&b的运算结果为12,a and b的运算结果则为13,这与我们的直觉结果有所差异。

这是因为二者为两种完全不同类型的运算符,分别对应于Python中的位运算符和逻辑运算符,下面依次进行讲解。

位运算

  位运算就是是把数值看作二进制来进行计算,计算机首先将输入的变量值转化为二进制,然后按照位运算的法则进行计算并输出结果,下面展示位运算的具体符号:

运算符描述运算规则
&按位与运算符上下都是1则为1,其他情况为0
|按位或运算符上下其中一个是1则为1,其他情况为0
^按位异或运算符上下相同为0,不同为1
~按位取反运算符一个有符号二进制的补码形式
<<左移运算符乘法运算,左移一位就是乘以2
>>右移运算符除法运算,右移一位就是除以2

上述例子中,c的输出结果为12,看起来与a、b的取值似乎毫无关联。这是因为位运算符的结果以十进制数展示,但它的运算过程是以二进制为依据的,我们可以把上述各变量转化为二进制来便于理解:

&的运算规则为两个相应位均为1才返回1,因此上述运算结果会返回00001100,转化为十进制后即为12。

位运算符中的其他符号与之原理类似,大家可以自己动手试试~例如,左移运算符<<代表将各二进位全部左移若干位,示例如下:

逻辑运算

  逻辑运算可以分为"与" "或" "非"语句,输出的结果也为布尔值,具体如下:

运算符描述
and布尔"与",左右皆真才为真
or布尔"或",左右一个为真即为真
not布尔"非" ,条件为真则为假
操作运行如下:
print(True and True) #左为真,右也为真,与语句为真print (True or False) #左为真,右为假,或语句为真print (not True or False) #条件为真,非语句为假
以上实例输出结果:
上面的代码中运算符左右均为布尔值,因此判断起来较为容易。对于非布尔值的变量,在Python里会将0、[]、()、{}、和None对应于False;其他对应于True。此外,在布尔上下文中,若所有值均为True,and返回最后一个为True的值;若所有值均为False,and返回第一个为False的值。示例如下:

在案例2中,a、b均对应为True,且b为最后一个变量,因此返回b的取值,即为13。

到这里,我们就讲解完了上面两个略微烧脑的小案例。除了上述提到的几类运算符,Python中还包括算数运算符、赋值运算符和成员运算符,限于篇幅限制,无法在这里一一展开,大家可以在公众号后台回复python运算符来获取完整的操作手册~




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

字符串函数总动员

用词云图看2020社科基金课题~

建议收藏!Python精选推文干货合集

xpose和sxpose,谁是卧底?

让你的数据一目了然--label命令介绍
Python推文合集基础篇(下)|算法简介
【小白指南】Python中有哪些数据类型?(附推文合集)
轻松获取通行数据——cntraveltime命令介绍
让Stata完美牵手中国地图之cnmapsearch
自然语言分析——利用NLTK进行文本预处理
寻找B站的最爱--8月B站全站榜爬虫
cnaddress命令——实现经纬度转换为中文地址
定位神器——cngcode
Python入门—Spyder的简单使用
Jupyter Notebook 的这些tips你了解吗?
给变量名换马甲之rename命令
追踪命令set trace on——解你燃眉之急
关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存