Python 字符串
字符串的驻留机制
-
在Python中字符串是基本数据类型,是一个不可变的字符序列
-
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
-
驻留机制的几种情况(交互模式)
字符串的长度为0或者1时
符合标识符的字符串
字符串只在编译时进行驻留,而非运行时
[-5,256]之间的整数数字 -
sys中intern方法强制2个字符串指向同一个对象
字符串的常用操作
-
查询操作的方法
index(),查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError
rindex(),查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError
find(),查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1
rfind(),查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1
-
字符串的大小写转换操作
upper(),把字符串中所有字符都转成大写字母
lower(),把字符串中所有字符都转成小写字母
swapcase(),把字符串中所有大写字母转成小写字母,把所有小写子母都转成大写字母
capitalize(),把第一个字符转换成大写,把其余字符转换为小写
title(),把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
-
字符串内容对齐操作
center(),居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串
ljust(),左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串
rjust(),右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串
zfill(),右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定宽度小于等于字符串的长度,返回字符串本身
如:s.center(20,'*')
s.center(20)
-
字符串劈分操作
split(),从字符串的左边开始劈分
rsplit(),从字符串的右边开始劈分
----默认的劈分字符是空格字符串,返回的值都是一个列表
----可以通过参数sep指定劈分字符串时的劈分符
----通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分
如:lst=s.split()
lst2=s2.split(sep='|',maxsplit=1)
-
判断字符串操作
isidentifier(),判断指定的字符串是不是合法的标识符
isspace(),判断指定的字符串是否全部由空白字符串组成(回车、换行、水平制表符)
isalpha(),判断指定的字符串是否全部由字母组成
isdecimal(),判断指定的字符串是否全部由十进制的数字组成
isnumeric(),判断指定的字符串是否全部由数字组成
isalnum(),判断指定字符串是否全部由字母和数字组成
-
字符串其他操作
replace() 字符串替换,第一个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数
join() 字符串合并,将列表或元组中的字符串合并成一个字符串
如:
s='hello,Python'
new_s=s.replace('Python','Java')
lst=['hello','Java','Python']
new_lst=''.join(lst)
endswith() 用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。
字符串的比较操作
-
运算符
>,>=,<,<=,==,!= -
比较规则
首先比较两个字符串中的第一个字符,如果想等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不想等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较 -
比较原理
两个字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
字符串的切片操作
- 字符串是不可变类型
不具备增、删、改等操作
切片操作将产生新的对象
格式化字符串
- 格式化的三种方式
%作占位符
%s,字符串
%d,整数
%f,浮点数
如:‘我的名字叫:%s,今年%d岁了’ % (name,age)
{}作占位符
{0} {1} {2}
如:‘我的名字叫:{0},今年{1}岁了,我真的叫:{0}’.format(name,age)
f-string
如:f'我叫{name},今年{age}岁'
字符串的编码转换
- 编码与解码的方式
编码:将字符串转换为二进制数据(bytes)
byte=s.encode(encoding='GBK') #GBK编码中,一个中文占两个字节
byte=s.encode(encoding='UTF-8') #UTF-8编码中,一个中文占三个字节
解码:将bytes类型的数据转换为字符串类型
byte.decode(encoding='GBK') #对应编码格式
byte.decode(encoding='UTF-8') #对应编码格式