'''字符串的驻留机制 字符串的常用操作 字符串的比较 字符串的切片操作 格式化字符串 字符串的编码转换''' #字符串:在Python中字符串是基本数据类型,是一个不可变的字符序列 #字符串驻留机制:仅保留一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中, #Python的驻留机制对相同的字符只保留一份拷贝,后续创建相同字符时不回开辟新空间,而是把该字符串的地址赋给新的变量 a='python' b="python" c='''python''' print(a,id(a)) print(b,id(b)) print(c,id(c)) '''驻留机制的几种情况(交互模式) 字符串的长度为0或1时 符合标识符的字符串 字符串只在编译时进行驻留,而非运营时 [-5,256]之间的整数数字 sys中的intern方法强制两个字符串指向同一个对象 PyCharm对字符串进行了优化处理''' ''' 字符串的查询操作的方法 index() 查找子串substr第一次出现的位置,如果查找的子串不存在,则抛出ValueError rindex() 查找子串substr最后一次出现的位置,如果查找子串的位置不存在时,则抛出ValueError find() 查找子串substr第一次出现的位置,如果查找的子串不存在,则返回-1 rfind() 查找子串substr最后一次出现的位置,如果查找的子串不存在,则返回-1''' #字符串的查询操作 a='孙梦晴很漂亮' print(len(a)) print(a.startswith('孙')) print(a.startswith('孙梦晴')) print(a.endswith('漂亮')) print(a.index('梦')) print(a.rindex('梦')) print(a.find('孙')) print(a.rfind('孙')) print(a.count('梦')) #print(a.index('美')) ValueError: substring not found #判断字符串的方法 a='孙梦晴很漂亮' print(a.isalnum()) #判断指定字符串是否全都由字母和数字组成 b=a.isalpha() #判断指定字符串是否全都由字母组成 c=a.isdigit() d=a.isspace() #判断指定字符串是否全部由空白字符组成(回车,换行,水平制表符) e=a.isupper() f=a.islower() g=a.isidentifier() #判断指定字符串是不是合法的标识符 h=a.isdecimal() #判断指定字符串是否全部由十进制的数字组成 i=a.isnumeric() #判断指定字符串是否全部由数字组成 print(b,c,d,e,f,g,h,i) #祛除首尾空格信息 a=' 孙梦晴和晴梦孙 ' b=a.strip() print(b) c=a.strip('孙') print(c) d=a.lstrip('孙') e=a.rstrip('孙') print(d,e) '''大小写转化 upper() 把字符串中所有字符都转成大写字母 lower() 把字符串中所有字符都转成小写字母 swapcase() 把字符串中所有大写字母转成小写,把所有小写字母转成大写 capitalize() 把第一个字符转成大写,把其余字符转成小写 title() 把每个单词的第一个字符转成大写,把每个单词的其余字符转成小写''' a='sun meng qing hen piao liang' b=a.split() c=a.capitalize() d=a.title() e=a.upper() #转成大写之后,会产生一个新的字符串对象 f=a.lower() g=a.swapcase() print(b) print(c) print(d) print(e) print(f) print(g) '''字符串内容对齐操作 center() 居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度 则返回原字符串 ljust() 左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度 rjust() 右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度 zfill() 右对齐,左边用0填充,该方法只接受一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度, 返回字符串本身''' a='hello,python' #居中对齐 print(a.center(20,'*')) #左对齐 print(a.ljust(20)) print(a.ljust(10)) print(a.ljust(20,'*')) #右对齐 print(a.rjust(20,'*')) print(a.rjust(20)) print(a.rjust(10)) #格式排版 a='孙梦晴' b=a.center(9,'*') print(b) c=a.ljust(9,'*') d=a.rjust(9,'*') print(c) print(d) '''字符串劈分操作的方法 split() 从字符串的左边开始劈分,默认的劈分字符都是空格字符串,返回的值都是一个列表 以通过参数sep指定劈分字符串的劈分符 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余的子串会单独作为一部分 rsplit() 从字符串的右边开始劈分,默认的劈分字符都是空格字符串,返回的值都是一个列表 以通过参数sep指定劈分字符串的劈分符 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余的子串会单独作为一部分''' s='hello world' lst=s.split() print(lst) s1='hello|world|python' print(s1.split(sep='|')) print(s1.split(sep='|',maxsplit=1)) print(s1.rsplit()) print(s1.rsplit(sep='|')) print(s1.rsplit(sep='|',maxsplit=1)) #字符串替换 replace() 第1个参数指定被替换的子串,第二个参数指定替换子串的字符串,该方法返回替换后得到的字符串 #替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数 s='hello,python' print(s.replace('python','java')) s1='hello,python,python' print(s1.replace('python','java',2)) #字符串替换 join() 将列表或元组中字符串合并成一个字符串 lst=['hello','java','python'] print('|'.join(lst)) print(''.join(lst)) '''字符串的比较操作 运算符:>,>=,<,<=,==,!= 比较规则:首次比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时, 其比较结果就是两个字符串的比较结果,两个字符串后面的字符将不再被比较 比较原理:两个字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value 与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符''' print('apple'>'app') print('apple'>'banana') print(ord('a'),ord('b')) print(chr(97),chr(98)) '''==与is 的区别 == 比较的是value is 比较的是 id是否相等''' a=b='python' c='python' print(a == b) print(a == c) print(a is b) print(a is c) print(id(a)) print(id(b)) print(id(c)) '''字符串的切片操作 字符串是不可变类型 不具备增删改等操作 切片操作将产生新的对象''' s='hello,python' s1=s[:5] #由于没有指定起始位置,所以从零开始切 s2=s[6:] #由于没有指定结束位置,所以切到字符串的最后一个位置 s3='!' snewstr=s1+s2+s3 print(s1) print(s2) print(snewstr) print('----切片操作[start,stop,step----') print(a[1:5:1]) #从1开始截到5(不包含5),步长为1 print(a[::2]) #默认从0开始,没有写结束,默认到字符串的最后一个元素,步长为2,两个元素之间的索引间隔为2 print(a[::-1]) #默认从字符串的最后一个元素开始,到字符串的第一个元素结束,因为步长为负数 print(a[6::-1]) #从索引6的元素开始,到字符串的最后一个元素,步长为1 '''格式化字符串 %做占位符 %s-->字符串 %i或%d-->整数 %f-->浮点数 {}做占位符''' # %占位符 name='张三' age=20 print('我叫%s,今年%d岁了' % (name,age)) # {}占位符 print('我叫{0},今年{1}岁了'.format(name,age)) #f-string print(f'我叫{name},今年{age}岁了') print('%10d' % 99) #10表示的是宽度 print('%.3f' % 3.1415926) #.3表示的是小数点后三位 #同时表示宽度和精度 print('%10.3f' % 3.1415926) print('{0:.3}'.format(3.1415926)) #.3表示的是一共三位小数 print('{:.3f}'.format(3.1415926)) #3.3f表示的是三位小数 print('{:10.3f}'.format(3.1415926)) #同时设置精度和宽度 '''字符串的编码转换 A计算机 str在内存中以Unicode表示-->编码-->byte字节传输-->解码-->B计算机 显示 编码与解码的方式 编码:将字符串转换成二进制数据(bytes) 解码:将bytes类型的数据转换成字符串类型''' s='天涯共此时' #编码 print(s.encode(encoding='GBK')) #在GBK这种编辑格式中,一个中文占两个字节 print(s.encode(encoding='UTF-8')) #在UTF-8这种编辑格式中,一个中文占三个字节 #解码 #byte代表就是一个二进制数据(字节类型的数据) byte=s.encode(encoding='GBK') #编码 print(byte.decode(encoding='GBK')) byte=s.encode(encoding='UTF-8') print(byte.decode(encoding='UTF-8')) #编码和解码的格式要相同
字符串的基本应用
最新推荐文章于 2023-02-16 21:51:16 发布