c#发展

注册

 

发新话题 回复该主题

20天搞定Python基础一文清晰掌 [复制链接]

1#

Python中的字符串

字符串的意思就是“一串字符”,比如Helloworld是一个字符串,Howareyou?也是一个字符串。

Python要求字符串必须使用引号括起来,使用单引号也行,使用双引号也行,只要两边的引号能配对即可。

字符串引号里面的的每个基本单元叫做字符,比如字符串abc中,a、b和c就是字符串组成的基本单元,它们都是字符。

如下定义的变量,存储的是字符串类型的值

a=ImBob#一对双引号b=IamBob#一对单引号c=Hesaid:I\mBob#转义字符d=ImBob#三个单引号e=ImBob#三个双引号

小总结:

双引号或者单引号中的数据,就是字符串如果使用一对引号来定义字符串,当出现符号冲突时可以使用转义字符,比如变量c使用三个单引号或者三个双引号定义的字符串可以包裹任意文本字符串的运算

Python为字符串类型提供了非常丰富的运算符,我们可以使用+运算符来实现字符串的拼接,可以使用*运算符来重复一个字符串的内容,可以使用in和notin来判断一个字符串是否包含另外一个字符串,我们也可以用[]和[:]运算符从字符串取出某个字符或某些字符。

拼接和重复

下面的例子演示了使用+和*运算符来实现字符串的拼接和重复操作。

s1=hello++worldprint(s1)#结果:helloworlds2=!*3print(s2)#结果:!!!s1+=s2#s1=s1+s2print(s1)#结果:helloworld!!!s1*=2#s1=s1*2print(s1)#结果:helloworld!!!helloworld!!!

用*实现字符串的重复是非常有意思的一个运算符,在很多编程语言中,要表示一个有10个a的字符串,你只能写成aaaaaaaaaa,但是在Python中,你可以写成a*10。你可能觉得aaaaaaaaaa这种写法也没有什么不方便的,那么想一想,如果字符a要重复次或者0次又会如何呢?

比较运算

对于两个字符串类型的变量,可以直接使用比较运算符比较两个字符串的相等性或大小。

需要说明的是,因为字符串在计算机内存中也是以二进制形式存在的,那么字符串的比较其实比的是:每个字符对应的编码的大小。

例如A的编码是65,而a的编码是97,所以Aa的结果相当于就是的结果,很显然是True;

而boybad,因为第一个字符都是b比不出大小,所以实际比较的是第二个字符的大小,显然oa的结果是False,所以boybad的结果也是False。

如果不清楚两个字符对应的编码到底是多少,可以使用ord函数来获得,例如ord(A)的值是65,而ord(赵)的值是。

下面的代码为大家展示了字符串的比较运算。

s1=awholenewworlds2=helloworldprint(s1==s2)#Falseprint(s1s2)#Trueprint(s2==helloworld)#Trueprint(s2==Helloworld)#Falseprint(s2!=Helloworld)#Trues3=赵四print(ord(赵),ord(四))#22235s4=王大拿print(ord(王),ord(大),ord(拿))#print(s3s4,s3=s4)#TrueFalse

需要强调一下的是,字符串的比较运算比较的是字符串的内容,Python中还有一个is运算符(身份运算符),如果用is来比较两个字符串,它比较的是两个变量对应的字符串是否在内存中相同的位置(内存地址),简单的说就是两个变量是否对应内存中的同一个字符串。看看下面的代码就比较清楚nis运算符的作用了。

s1=helloworlds2=helloworld1s3=s2#比较字符串的内容print(s1==s2,s2==s3)#FalseTrue#比较字符串的内存地址print(s1iss2,s2iss3)#FalseTrue

总结:s1==s2比较的是字符串里面的内容,只要内容相同结果就是True,不同就是False;而s1iss2则比较的是内存地址,两者内存是不一样的所以False。

成员运算

Python中可以用in和notin判断一个字符串中是否存在另外一个字符或字符串,in和notin运算通常称为成员运算,会产生布尔值True或False,代码如下所示。

s1=hello,worldprint(heins1)#Trues2=goodbyeprint(s2ins1)#False

获取字符串长度

获取字符串长度没有直接的运算符,而是使用内置函数

len

,我们在上节课的提到过这个内置函数,代码如下所示。

索引与切片

字符串中的每个字符都有表示位置的下标值,下标范围从左往右从0开始依次增加或者从右往左从-1开始依次减少。

比如我们有字符串soldier,现在它的下标怎么命名的?

如果希望从字符串中取出某个字符,我们可以对字符串进行索引运算,运算符是[n],其中n是一个整数,假设字符串的长度为N,那么n可以是从0到N-1的整数,其中0是字符串中第一个字符的索引,而N-1是字符串中最后一个字符的索引,通常称之为正向索引;

在Python中,字符串的索引也可以是从-1到-N的整数,其中-1是最后一个字符的索引,而-N则是第一个字符的索引,通常称之为负向索引。注意,因为字符串是不可变类型,所以不能通过索引运算修改字符串中的字符。

s=abcn=len(s)#获取第一个字符print(s[0],s[-n])#aa#获取最后一个字符print(s[n-1],s[-1])#66#获取索引为2或-7的字符print(s[2],s[-7])#cc#获取索引为5和-4的字符print(s[5],s[-4])#33

需要提醒大家注意的是,在进行索引操作时,如果索引越界(正向索引不在0到N-1范围,负向索引不在-1到-N范围),会引发IndexError异常,错误提示信息为:stringindexoutofrange(字符串索引超出范围)。

如果要从字符串中取出多个字符,我们可以对字符串进行切片,运算符是[i:j:k],其中i是开始索引,索引对应的字符可以取到;j是结束索引,索引对应的字符不能取到;k是步长,默认值为1,表示从前向后获取相邻字符的连续切片,所以:k部分可以省略。

假设字符串的长度为N,当k0时表示正向切片(从前向后获取字符),如果没有给出i和j的值,则i的默认值是0,j的默认值是N;当k0时表示负向切片(从后向前获取字符),如果没有给出i和j的值,则i的默认值是-1,j的默认值是-N-1。如果不理解,直接看下面的例子,记住第一个字符的索引是0或-N,最后一个字符的索引是N-1或-1就行了。

s=abc#i=2,j=5,k=1的正向切片操作print(s[2:5])#c12#i=-7,j=-4,k=1的正向切片操作print(s[-7:-4])#c12#i=2,j=9,k=1的正向切片操作print(s[2:])#c#i=2,j=9,k=2的正向切片操作print(s[2::2])#c#i=0,j=9,k=2的正向切片操作print(s[::2])#ac#i=1,j=-1,k=2的正向切片操作print(s[1:-1:2])#b#i=7,j=1,k=-1的负向切片操作print(s[7:1:-1])#c#i=-2,j=-8,k=-1的负向切片操作print(s[-2:-8:-1])#c#i=7,j=-10,k=-1的负向切片操作print(s[7::-1])#cba#i=-1,j=1,k=-1的负向切片操作print(s[:1:-1])#6c#i=0,j=9,k=1的正向切片print(s[:])#abc

循环遍历

如果希望从字符串中取出每个字符,可以使用for循环对字符串进行遍历,有两种方式。

方式一:

s1=helloforindexinrange(len(s1)):print(s1[index])

方式二:

s1=helloforchins1:print(ch)

字符串的方法

在Python中,我们可以通过字符串类型自带的方法对字符串进行操作和处理,对于一个字符串类型的变量,我们可以用变量名.方法名()的方式来调用它的方法。所谓方法其实就是跟某个类型的变量绑定的函数,后面我们讲面向对象编程的时候还会对这一概念详加说明。

大小写相关操作

下面的代码演示了和字符串大小写变换相关的方法。

capitalize():字符串首字母大写title():字符串中每个单词首字母大写upper():字符串全部大写lower():字符串全部小写s1=hello,world!#使用capitalize方法获得字符串首字母大写后的字符串print(s1.capitalize())#Hello,world!#使用title方法获得字符串每个单词首字母大写后的字符串print(s1.title())#Hello,World!#使用upper方法获得字符串大写后的字符串print(s1.upper())#HELLO,WORLD!s2=GOODBYE#使用lower方法获得字符串小写后的字符串print(s2.lower())#goodbye

查找操作

如果想在一个字符串中从前向后查找有没有另外一个字符串,可以使用字符串的find或index方法。

find():从字符串中查找另一个字符串(参数)所在的位置,如果存在则返回匹配的字符串的首字母下标,没有找到则返回-1index():与find方法类似,如果找不到则会引发异常。

s=hello,world!#find方法从字符串中查找另一个字符串所在的位置#找到了返回字符串中另一个字符串首字符的索引print(s.find(or))#8#找不到返回-1print(s.find(good))#-1#index方法与find方法类似#找到了返回字符串中另一个字符串首字符的索引print(s.index(or))#8#找不到引发异常print(s.index(good))#ValueError:substringnotfound

在使用find和index方法时还可以通过方法的参数来指定查找的范围,也就是查找不必从索引为0的位置开始。find和index方法还有逆向查找(从后向前查找)的版本,分别是rfind和rindex,

rfind():“r”表示的是right右侧,表示从右侧开始查找字符串,没有找到返回-1rindex():与rfind方法类似,如果找不到则会引发异常。

代码如下所示。

s=hellogoodworld!#从前向后查找字符o出现的位置(相当于第一次出现)print(s.find(o))#4#从索引为5的位置开始查找字符o出现的位置print(s.find(o,5))#7#从后向前查找字符o出现的位置(相当于最后一次出现)print(s.rfind(o))#12

判断

可以通过字符串的startswith、endswith来判断字符串是否以某个字符串开头和结尾;还可以用is开头的方法判断字符串的特征,这些方法都返回布尔值,

startswith():判断字符串是否以指定的字符串开头,返回布尔值结果endswith():判断字符串是否以指定的字符串结尾,返回布尔值结果isdigit():判断字符串是否由数字构成,返回布尔值结果isalpha():判断字符串是否以字母构成,返回布尔值结果isalnum():判断字符串是否以数字和字母构成,返回布尔值结果

代码如下所示。

s1=hello,world!#startwith方法检查字符串是否以指定的字符串开头返回布尔值print(s1.startswith(He))#Falseprint(s1.startswith(hel))#True#endswith方法检查字符串是否以指定的字符串结尾返回布尔值print(s1.endswith(!))#Trues2=abc#isdigit方法检查字符串是否由数字构成返回布尔值print(s2.isdigit())#False#isalpha方法检查字符串是否以字母构成返回布尔值print(s2.isalpha())#False#isalnum方法检查字符串是否以数字和字母构成返回布尔值print(s2.isalnum())#True

去除空格

字符串的strip方法可以帮我们获得将原字符串修剪掉左右两端空格之后的字符串。这个方法非常有实用价值,通常用来将用户输入中因为不小心键入的头尾空格去掉,strip方法还有lstrip和rstrip两个版本,相信从名字大家已经猜出来这两个方法是做什么用的。

s=helloworld

.
分享 转发
TOP
发新话题 回复该主题