当前位置: 首页 > 后端技术 > Python

Python:字符串

时间:2023-03-26 18:30:39 Python

字符串是Python中的一种基本数据类型,是一个不可变的字符序列。字符串的驻留机制只保留一份相同且不可变的字符串。字符串中存储了不同的值。在Python的驻留池中,Python的驻留机制只保留一份相同的字符串。以后创建相同的字符串时,不会再开辟新的空间,将字符串的地址赋值给新创建的变量。字符串驻留机制产生的几种情况:#1.字符串长度为0或1s1=''s2=''print(s1iss2)#True#2.匹配标识符的字符串(符合thenamingSpecification:letters,numbers,underscore)s1='ab_'s2='ab_'print(s1iss2)#True#3.字符串只存在于编译时,不存在于运行时a='abc'b='ab'+'c'c=''.join(['ab','c'])print(aisb)#Trueprint(aisc)#False#4.[-5,256]直接整数Numbera='-5'b='-5'print(aisb)#True驻留机制的优缺点:需要相同值的字符串,可以直接从字符串池中使用,避免频繁创建和销毁改进效率和节省内存,所以拼接字符串和修改字符串会影响性能。需要字符串拼接的时候推荐使用str类型的join方法而不是"+",因为join()方法是先计算所有字符的长度,然后复制,创建一个新的对象,效率更高.字符串常用操作查询子串位置#1.index():子串第一次??出现,不存在则抛出#2.rindex():子串最后一次出现,不存在则抛出#3.find():子串最先出现的位置,不存在,返回-1#4.rfind():子串最后出现的位置,不存在,返回-1s='hellohello'print(s.index('h'))#0#print(s.index('j'))#ValueError:substringnotfoundprint(s.rindex('h'))#6print(s.find('h'))#0print(s.find('j'))#-1print(s.rfind('h'))#6个大小写转换操作#1.upper:将所有字符转换为大写并生成一个新的字符串对象#2.lower:put将所有字符转为小写生成一个新的字符串对象#3.swapcase:将所有字符从小写转为大写,将大写转为小写以生成一个新的字符串对象#4.capitalize:将第一个字符转为大写,其余小写,生成新的stringobject#4.title:将每个单词的第一个字符转换为大写,其余转换为小写,生成一个新的字符串对象s='helloworld'print(s.upper())#HELLOWORLDprint(s.lower())#helloworldprint(s.swapcase())#HELLOWORLDprint(s.capitalize())#Helloworldprint(s.title())#HelloWorld字符串内容对齐操作#1.center():居中对齐,第一个参数指定宽度,第二个参数指定填充,第二个参数可选,默认为空格,如果设置宽度小于实际宽度则返回原字符串#2.ljust():Left对齐方式,第一个参数指定宽度,第二个参数指定填充符,第二个参数可选,默认空格,如果设置的宽度小于实际宽度,则返回原字符串#3.rjust():右对齐,第一个参数指定宽度,第二个参数指定填充字符,second参数可选,默认为空格,如果设置的宽度小于实际宽度,则返回原字符串#4.zfill():右对齐,左边补0,只有一个parameter指定宽度,如果设置的宽度小于实际宽度,则返回原字符Strings1='helloPython'print(s.center(20))print(s.center(20,'-'))#----helloworld-----print(s.ljust(20,'-'))#你好世界--------打印(s.rjust(20,'-'))#----------你好世界打印(s.zfill(20))#000000000helloworldprint('-8911'.zfill(8))#-0008911字符串的拆分操作#1.split():从左边拆分,默认拆分字符为空格,返回一个列表;#通过sep参数指定要拆分的字符;参数maxsplit指定最大拆分数。超过拆分次数后,剩余的子串将单独作为一部分。#2.rsplit():从右开始拆分,默认拆分字符为空格,返回A列表;#通过sep参数指定要分割的字符;参数maxsplit指定最大拆分数,超过拆分数后,剩余的子串将单独成为其中的一部分s3='hellomynameisAlin's4='hello-my-name-is-Bill'print(s3.split())#['hello','my','name','is','Alin']print(s4.split(sep='-'))#['hello','my','name','is','Bill']print(s4.split('-',maxsplit=3))#['hello','my','name','is-Bill']print(s4.rsplit('-',maxsplit=3))#['hello-my','name','is','Bill']print(s3.rsplit())#['hello','my','name','is','Alin']判断字符串的操作方法#1.isidentifier():判断是否为合法标识符#2.isspace():判断是否由空白字符组成(回车,linefeed,tab)#3.isalpha():判断是否由字母字符组成#3.isdecimal():判断是否由小数字符组成数字组成#3.isnumeric():判断是否由数字组成(包括汉字、罗马数字等)#3.isalnum():判断是否由字母和数字组成s5='hello'print(s5.isidentifier())#Trueprint(s5.isspace())#Falseprint(s5.isalpha())#Trueprint(s5.isdecimal())#Falseprint(s5.isnumeric())#Falseprint(s5.isalnum())#真字符串替换#replace():返回替换后得到的新字符串对象,原字符串不变#参数1:待替换子串#参数2:待替换子串#参数3:最大替换次数s6='hello111'print(s6.replace('1','2',2))#Mergeofhello221strings#join():将列表或元组中的字符串合并为一个Stringl1=['1',2,'2']l2=['1','2','3']#print(''.join(l1))#TypeError:sequenceitem1:expectedstrinstance,intfoundprint('-'.join(l2))#1-2-3字符串的比较运算#运算符:>,>=,<,<=,==,!=#C比较规则:从第一个开始,如果相等,则继续比较下一个,依次比较。第一次不相等时的比较结果#为两个字符串的比较结果,后面的字符不会进行比较#比较原则:两个字符比较的是其序数值,调用内置函数ord()获取字符的序数值;#内置函数chr():指定序数值得到对应的字符print('apple'>'appml')#Falseprint('apple'>'app')#Trueprint('apple'>'b')#Falseprint(ord('l'))#108print(ord('m'))#109print(chr(109))#m==和is的区别?==判断值是否相等,is比较id是否等于字符串的切片操作(类似list)#不可变类型,不支持增删改操作,切片操作会生成新对象#语法:[start:end:step]s='hello,Python's11=s[:5]s22=s[6:]s33='!'ns=s11+s33+s22print(s11)#helloprint(s22)#Pythonprint(s33)#!print(ns)#hello!Pythonprint(s[-6::])#Pythonprint(s[6::-1])#P,olleh格式字符串#1.使用%作为占位符(%s:String;%ior%d:integer;%f:floatingpointnumber)name='all'age=22print('我叫%s,今年我%d岁'%(name,age))#IThenameisall,今年22岁#2.{}作为占位符print('我的名字是{0},今年是{1}岁'.format(name,age))#我的名字是all,今年22岁#3.f-stringprint(f'我叫{name},今年是{age}岁')#我的名字是all,今年22岁宽度和精度设置打印('%10d'%99)#10标识宽度print('%.3f'%3.1415926)#.3标记小数点后保留的位数,输出3.142print('%10.3f'%3.1415926)#可以用同时输出3.142print('{0:.3}'.format(3.1415926))#输出3.14,限制总位数print('{0:.3f}'.format(3.1415926))#输出3.142,限制小数点后保留位数print('{0:10。3f}'.format(3.1415926))#输出3.142,限制小数点后保留的位数字符串编码转换#编码:将字符串转换为二进制数据(字节)#解码:将字节类型数据转换为字符串类型s='好天气'print(s.encode(encoding='GBK'))#b'\xba\xc3\xcc\xec\xc6\xf8'print(s.encode(encoding='UTF-8'))#b'\xe5\xa5\xbd\xe5\xa4\xa9\xe6\xb0\x94'b=s.encode(encoding='GBK')print(b.decode(encoding='GBK'))#好天气#print(b.decode(encoding='UTF-8'))#编码格式不同,报错UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xbainposition0:invalidstartbyte