字符串:在python中字符串是基本数据类型,是一个不可变的字符序列
字符串驻留机制:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
驻留机制的几种情况(交互模式)
1、字符串的长度为0或1时
2、符合标识符的字符串
3、字符串只在编译时进行驻留,而非运行时
4、[-5,256]之间的整数数字
sys中的intern方法强制2个字符串指向同一个对象
字符串驻留机制的优缺点
当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的
在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比‘+’效率高。
字符串的查询操作
| 功能 | 方法名称 | 作用 |
|---|---|---|
| 查询方法 | index() | 查找子串substr第一次出现的位置,如果查找的字串不存在时,则抛出ValueError |
| rindex() | 查找子串substr最后一次出现的位置,如果查找的字串不存在时,则抛出ValueError | |
| find() | 查找子串substr第一次出现的位置,如果查找的字串不存在时,则抛出-1 | |
| rfind() | 查找子串substr最后一次出现的位置,如果查找的字串不存在时,则抛出-1 |
s='hello,hello'
print(s.index('lo'))#3
print(s.find('lo'))#3
print(s.rindex('lo'))#9
print(s.rfind('lo'))#9
#print(s.index('k'))#ValueError: substring not found
print(s.find('k'))#-1
print(s.rindex('k'))#ValueError: substring not found
print(s.rfind('k'))#-1
字符串的大小写转换操作的方法
| 功能 | 方法名称 | 作用 |
|---|---|---|
| 大小写转换 | upper() | 把字符串中所有字符都转成大写字母 |
| lower() | 把字符串中所有字符都转成小写字母 | |
| swapcase() | 把字符串中所有小写字母都转成大写字母,把所有大写字母都转成小写字母 | |
| capitalize() | 把第一个字符转换为大写,把其他字符转换为小写 | |
| title() | 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写 |
s='pYthon' a=s.upper()#转成大写之后,会产生新的字符串对象 print(a)#PYTHON print(s)#pYthon b=s.lower() print(b)#python c=s.swapcase() print(c)#PyTHON d=s.capitalize() print(d)#Python s='hello,pytyon' e=s.title() print(e)#Hello,Pytyon
字符串内容对齐操作的方法
| 功能 | 方法名称 | 作用 |
|---|---|---|
| 字符串对齐 | center() | 居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
| ljust() | 左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 | |
| rjust() | 右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 | |
| zfill() | 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于字符串的长度,返回字符串本身 |
s='hello,Python' print(s.center(20,'*'))#****hello,Python**** print(s.ljust(20,'*'))#hello,Python******** print(s.rjust(20))# hello,Python print(s.zfill(20))#00000000hello,Python print(s.zfill(3))#hello,Python
字符串劈分操作的方法
| 功能 | 方法名称 | 作用 |
|---|---|---|
| 字符串的劈分 | spilt() | 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 |
| 以通过参数sep指定劈分字符串是的劈分符 | ||
| 通过参数maxspilt指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余的子串会单独做为一部分 | ||
| rspilt() | 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 | |
| 以通过参数sep指定劈分字符串是的劈分符 | ||
| 通过参数maxspilt指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余的子串会单独做为一部分 |
s='hello world Python' lst=s.split() print(lst)#['hello', 'world', 'Python'] s1='hello|world|python' print(s1.split())#['hello|world|python'] print(s1.split(sep='|'))#['hello', 'world', 'python'] print(s1.split(sep='|',maxsplit=1))#['hello', 'world|python']
判断字符串操作的方法
| 功能 | 方法操作 | 作用 |
|---|---|---|
| 判断字符串的方法 | isidentifier() | 判断指定的字符串是不是合法的标识符 |
| isspace() | 判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符) | |
| isalpha() | 判断指定的字符串是否全部由字母组成 | |
| isdecimal() | 判断指定的字符串是否全部由十进制的数字组成 | |
| isnumeric() | 判断指定的字符串是否全部由数字组成 | |
| isalnum() | 判断指定字符串是否全部由字母和数字组成 |
s='helloworld,Python'
print('1.',s.isidentifier())#1. False
print('2.','hello'.isidentifier())#2. True
print('3.','张三_'.isidentifier())#3. True
print('4.','张三_123'.isidentifier())#4.True
print('5.','t'.isspace())#5.True
print('6.','abc'.isalpha())#6. True
print('7.','张三'.isalpha())#7. True
print('8.','张三1'.isalpha())#8. False
print('9.','123'.isdecimal())#9. True
print('10.','123四'.isdecimal())#10. False
print('11.','123'.isnumeric())#11. True
print('12','123四'.isnumeric())#12. True
print('13.','abc1'.isalnum())#13. True
print('14.','张三123'.isalnum())#14. True
print('15.','123!'.isalnum())#15. False



