Python3数据类型—字符串

avatar 2020年2月23日18:41:12 评论 1,368 次浏览

字符串改如何描述呢?其实说到字符串,说简单也不简单,说难也不是很难。字符串是最常用的一个数据类型,字符型和变量有点类似,但也不是,这里不要过于纠结,看看字符串的特点。字符串使用单引号('')或者双引号("")来包含变量的值,下面看一下字符串的基本操作。

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.org
wulaoer = "www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby"

这就是一个字符串,我们看一下字符串的简单操作,字符串也是有索引的,可以根据索引进行分片,每一个元素都代表了一个索引值,包括空格和其他符合。下面看一下字符串的切片:

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.org
wulaoer = "www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby"
print("打印字符串索引4到10之间的字符",wulaoer[4:10]) #这里的结束位置之前,也就是说只能打印第九个索引位置的字符
print("打印字符串4以后的所有字符",wulaoer[4:])       #开始位置,包含开始位置的索引字符
print("打印字符串10以前的所有字符",wulaoer[:10])     #结束位置,但不包含结束位置的索引字符
print("打印字符串-1之前的所有字符",wulaoer[:-1])     #和上面的一样,结束位置,不包含结束位置的索引字符

输出结果:

打印字符串索引4到10之间的字符 wulaoe
打印字符串4以后的所有字符 wulaoer.org is a platform for learning Golong, Python, Java and Ruby
打印字符串10以前的所有字符 www.wulaoe
打印字符串-1之前的所有字符 www.wulaoer.org is a platform for learning Golong, Python, Java and Rub

这里需要注意,开始索引的位置和结束索引位置的字符,开始包含,结束不包含。python中字符串有很多内置函数,我们这里就先按照上面的增删改查,把字符串的内置函数一一举例一下,如有其他方法,也一起说明,下面看看列表的查。

字符串的查

字符串除了使用索引的方法,还有其他的方法可以查看字符串的元素,我们可以使用index()根据字符查看索引,可以根据find()函数,查看相同字符的count()函数。看下面的举例:

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = "www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby"
print("从左到右查找字符串中o的索引位置",wulaoer.index('o')) #默认从左到右开始查找,后面可以跟参数范围,从开始,到结束--打印的索引是从左到右
print("从左到右查找字符串中u的索引位置",wulaoer.find('u'))  #默认从左到右开始查找,后面可以跟参数范围,从开始,到结束--打印的索引是从左到右
print("从右到左查找字符串中o的索引位置,打印的索引位置为从左到右的索引",wulaoer.rindex('o')) #默认从右到左开始查找,后面可以跟参数范围,从开始,到结束--打印的索引是从左到右
print("从右到左查找字符串中u的索引位置,打印的索引位置为从左到右的索引",wulaoer.rfind('u')) #默认从右到左开始查找,后面可以跟参数范围,从开始,到结束--打印的索引是从左到右
print("统计字符串中出现w的次数",wulaoer.count('w')) #统计字符串中出现的字符次数,后面可以跟范围,没有显示0

输出结果:

从左到右查找字符串中o的索引位置 8
从左到右查找字符串中u的索引位置 5
从右到左查找字符串中o的索引位置,打印的索引位置为从左到右的索引 55
从右到左查找字符串中u的索引位置,打印的索引位置为从左到右的索引 69
统计字符串中出现w的次数 4

通过上面的内置函数,相信应该也能看明白了,从左到右和从右到左的区别,但是最终打印索引的值都是从左到右的值,而不是从右到左的值,每个内置函数都可以取一个范围,从开始到结束,不过这里的范围只能从左到右的范围,不能从右到左的范围,如果开始位置定义为'-1',不管查找字符串中任意字符都会出现-1,表示找不到。在字符串中还有一个内置函数format()可以对字符串进行格式化,这里也把它归到字符串的查,我们可以format()的参数,把字符串格式化,下面看一下列子吧。

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = "www.wulaoer.org is a platform for learning Golong, {}, {} and {}"
wulaoer1=wulaoer.format('Python3','Java','Ruby')
print(wulaoer1)
wulaoer = "www.wulaoer.org is a platform for learning Golong, {lan1}, {lan2} and {lan3}"
print(wulaoer.format_map({'lan1':'Python3','lan2':'Java','lan3':'Ruby'}))

输出结果:

www.wulaoer.org is a platform for learning Golong, Python3, Java and Ruby
www.wulaoer.org is a platform for learning Golong, Python3, Java and Ruby

这里的使用到了format()函数和format_map()函数,两者的区别一个是format()在调用过程中创建了一个新的字典,而format_map()函数是使用dict子类进行映射其它对象,还有就是format_map()快点。

字符串的改

修改字符串,可以使用索引直接进行重新赋值即可,或者转换成列表然后在列表中进行增加在转换成字符串,这些都是一些换汤不换药的方式,没什么意思,下面看看python提供的内置函数中的改吧。

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = "www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby"
print("把字符串中字符u替换成0",wulaoer.replace('u','0',2))  #把字符串中字符u替换成0,最多替换2个
print("把字符串中的所有字符都改成大写",wulaoer.upper())      #都大写
print("字符串中第一个字符大写其他都小写",wulaoer.capitalize()) #字符串第一个字符大写,其他小写
print("把字符串中所有字符都转小写",wulaoer.lower())           #所有字符都小写,修改整个字符
print("把字符串中所有字符都转小写",wulaoer.casefold())        #所有字符都小写,只修改大写的字符
print("以空格,符号,数字等隔开的首字母大写",wulaoer.title())  #以空格,符号,数字等隔开的首字母大写
print("大写改成小写,小写改成大写",wulaoer.swapcase())        #大写改成小写,小写改成大写,大小写替换

输出结果:

把字符串中字符u替换成0 www.w0laoer.org is a platform for learning Golong, Python, Java and R0by
把字符串中的所有字符都改成大写 WWW.WULAOER.ORG IS A PLATFORM FOR LEARNING GOLONG, PYTHON, JAVA AND RUBY
字符串中第一个字符大写其他都小写 Www.wulaoer.org is a platform for learning golong, python, java and ruby
把字符串中所有字符都转小写 www.wulaoer.org is a platform for learning golong, python, java and ruby
把字符串中所有字符都转小写 www.wulaoer.org is a platform for learning golong, python, java and ruby
以空格,符号,数字等隔开的首字母大写 Www.Wulaoer.Org Is A Platform For Learning Golong, Python, Java And Ruby
大写改成小写,小写改成大写 WWW.WULAOER.ORG IS A PLATFORM FOR LEARNING gOLONG, pYTHON, jAVA AND rUBY

这里注意了,lower()函数和casefold()函数的区别一个是针对所有字符,一个是针对大写的字符,两者的区别。还有一种修改字符串的内置函数,maketrans()函数,maketrans()函数是对两个字符串做一个映射,然后根据映射后的表进行修改字符串中出现的字符,举个例子:我们继续使用上面的字符串,上面的字符串中包含"wulaoer"字符,我们针对"wulaoer"这7个字符进行映射,然后在针对字符串中出现的五个字符进行修改:

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = "www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby"
oldtab='wulaoer'
newtab='1234567'
trabtab=wulaoer.maketrans(oldtab,newtab)  #用于创建映射转换表
print("把要修改的字符进行映射",trabtab)
print("根据映射的字符进行修改",wulaoer.translate(trabtab))      #根据maketrans方法而来,过滤字符串列表

输出结果:

把要修改的字符进行映射 {119: 49, 117: 50, 108: 51, 97: 52, 111: 53, 101: 54, 114: 55}
根据映射的字符进行修改 111.1234567.57g is 4 p34tf57m f57 3647ning G535ng, Pyth5n, J4v4 4nd R2by

上面两个字符oldtab和newtab的映射是w映射到1,u映射到2,l映射到3,a映射到4,o映射到5,e映射到6,r映射到7,映射后也就代表wulaoer这几个字符就代表着1234567,所以在字符串中出现的这7个字符会自动修改。注意,创建映射表的两个字符串要长度一致,一一对应,才能生成字典,字典的格式是oldtab:newtab的一一对应的关系。

字符串的删

字符串的删这里也不使用索引进行删除了,还是使用字符串的内置函数,在使用内置函数之前我们先修改一下字符串中的字符,因为在下面的例子中需要用到,在删除中我们用到了修改的函数replace(),这里修改的新值为空相当于删除。下面看这几个例子:

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
import re
wulaoer = "www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow"
print("删除左右两边相同的字符",wulaoer.strip('w'))  #删除左右两边相同的指定字符,默认删除空格
print("删除左边指定的字符",wulaoer.lstrip('w'))    #删除字符串左边的指定的字符
print("删除右边指定的字符",wulaoer.rstrip('w'))    #删除右边的指定字符,
print("利用替换删除字符",wulaoer.replace('w',''))  #利用replace()方法删除字符串
print("利用re模块删除字符串中指定的字符",re.sub('w','',wulaoer,3)) #利用re模块删除指定的字符,字符串名后面跟的是删除个数

输出结果:

删除左右两边相同的字符 .wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwo
删除左边指定的字符 .wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow
删除右边指定的字符 www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwo
利用替换删除字符 .ulaoer.org is a platform for learning Golong, Python, Java and Ruby o
利用re模块删除字符串中指定的字符 .wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow

使用strip()函数是针对字符串首尾相同的字符,如果没有相同的字符则只删除相同的一边,而lstrip()也一样,没有不删除。这里使用到re模块,如果不理解可以忽略,后面说到模块的时候会详细说明一下。

字符串的增

字符串的增也就是在原字符串的基础上增加字符,我们也继续使用内置函数,使用内置函数可以从新定义字符串的长度,然后根据不同的函数向左填充或者向右填充到指定长度,也可以使用json直接在首尾填充。看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = "www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow"
print("定义字符串的长度,不够使用自定义字符向右填充",wulaoer.ljust(80,'#'))   #向右填充
print("定义字符串的长度,不够使用自定义字符向左右填充",wulaoer.center(83,'@'))  #左右填充
print("定义字符串的长度,不够默认使用0字符向左填充",wulaoer.zfill(88))   #向左填充,默认参数宽度,填充默认0,不能定义
print("向字符串前插入,两个字符首尾插入",wulaoer.join("%¥")) #输入两个会在首尾各插入一个
print("向字符串之间插入指定字符连接字符串",'-'.join(wulaoer)) #以序列的符合为连接符,连接字符串生成一个新的字符串

输出结果:

定义字符串的长度,不够使用自定义字符向右填充 www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow###
定义字符串的长度,不够使用自定义字符向左右填充 @@@www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow@@@
定义字符串的长度,不够默认使用0字符向左填充 00000000000www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow
向字符串前插入,两个字符首尾插入 %www.wulaoer.org is a platform for learning Golong, Python, Java and Ruby wwow¥
向字符串之间插入指定字符连接字符串 w-w-w-.-w-u-l-a-o-e-r-.-o-r-g- -i-s- -a- -p-l-a-t-f-o-r-m- -f-o-r- -l-e-a-r-n-i-n-g- -G-o-l-o-n-g-,- -P-y-t-h-o-n-,- -J-a-v-a- -a-n-d- -R-u-b-y- -w-w-o-w

这里说一下zfill()函数只能填充0,不能填充自定义字符,json使用一个字符会从新赋值给变量,使用两个会在字符串的首尾追加字符,三个字符会遍历一遍字符串在字符串后追加一个字符串在最佳一个字符,这个了解即可。以上就是针对字符串的增删改查操作,下面看看字符串的组成都有哪些,如何判断组成类型,python中提供了很多字符串的判断函数,快看看吧。

字符串的判断

字符串的判断不是判断这个变量是不是字符串,而是判断字符串的组成是否包含数字,是否包含字母或者其他符合等等。也可以判断字符串的结尾字符,或者首段字符。下面的例子重新修改了字符串,针对每个字符串的判断要看明白后面的注释,下面看看这些例子:

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = "www.wulaoer.org is \na platform for learning Golong, Python3, Java and Ruby wwow"
print("判断字符串的某一段的结尾字符",wulaoer.endswith('r',4,100))  #判断字符串是否以定义字符结尾,开始位置,结束位置
print("判断字符串的某一段的头部字符",wulaoer.startswith("www",0,10))#检测字符串是否以设置的字符串开头,后面跟检测范围,是为True,否为False
print("判断字符串是否由数字和字母组成,不能有空格和其他符合",wulaoer.isalnum()) #检测字符串是否由字母和数字组成,字符串中不能有空格以及其它符合
print("判断字符串是否只有字母组成",wulaoer.isalpha()) #检测字符串是否只有字母组成
print("判断字符串是否只有数字组成",wulaoer.isdigit()) #是否全有数字组成
print("判断字符串是否只有空格组成",wulaoer.isspace()) #是否由空格组成
#print("判断字符串是否为ascii码",wulaoer.isascii())   #判断字符串是否为ascii码
print("判断字符串是否为有效的字符串,不能有空格,符合",wulaoer.isidentifier())#判断字符串是否是有效的字符串
print("判断字符串是否包含十进制字符",wulaoer.isdecimal())   #字符串是否包含十进制字符,返回True,False
print("判断字符串是否只有数字组成",wulaoer.isnumeric())   #检测字符串是否只有数字组成,针对unicode对象
print("判断字符串是否为可打印字符,不能包含\\n,\\r等",wulaoer.isprintable())  #判断是否为可打印字符串
print("根据\\r,\\r\\n,\\n等对字符进行分割,返回一个新的列表",wulaoer.splitlines())  #按照('\r','\r\n','\n')进行分割,返回一个包含各行作为元素的列表,如果参数为False,则不包含换行符,为True则保留换行符

输出结果:

判断字符串的某一段的结尾字符 False
判断字符串的某一段的头部字符 True
判断字符串是否由数字和字母组成,不能有空格和其他符合 False
判断字符串是否只有字母组成 False
判断字符串是否只有数字组成 False
判断字符串是否只有空格组成 False
判断字符串是否为有效的字符串,不能有空格,符合 False
判断字符串是否包含十进制字符 False
判断字符串是否只有数字组成 False
判断字符串是否为可打印字符,不能包含\n,\r等 False
根据\r,\r\n,\n等对字符进行分割,返回一个新的列表 ['www.wulaoer.org is ', 'a platform for learning Golong, Python3, Java and Ruby wwow']

这里注意到在'\\n'就是可以理解为反义符,打印出来的时候就是'\n',不反义打印的会是回车或者空格子类的了。这里要注意的是针对字符串的判断,判断字符串的组成部分,包含的字符。

字符串的格式化

我们在打印的时候,需要描述一下变量,然后把变量的值放到描述的语句中,进行格式化。这是在打印的时候经常需要用到的。举个例子:我们给了一个名称和年龄,然后描述一下这个人进行格式化如何操作呢?

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = "吴老二"
age = 27
print("%s是一个在%d岁时就已经学会了刷锅洗碗的技能" % (wulaoer,age))

输出结果:

吴老二是一个在27岁时就已经学会了刷锅洗碗的技能

格式化时前面的%s是表示字符串,%d是便是整数,更多格式化符合可以参考:

  %c	 格式化字符及其ASCII码
  %s	 格式化字符串
  %d	 格式化整数
  %u	 格式化无符号整型
  %o	 格式化无符号八进制数
  %x	 格式化无符号十六进制数
  %X	 格式化无符号十六进制数(大写)
  %f	 格式化浮点数字,可指定小数点后的精度
  %e	 用科学计数法格式化浮点数
  %E	 作用同%e,用科学计数法格式化浮点数
  %g	 %f和%e的简写
  %G	 %f 和 %E 的简写
  %p	 用十六进制数格式化变量的地址

以上是python3字符的基本用法,没有了,看写其他的吧!如有疑问欢迎留言~~~~~~

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: