字符串的方法

字符串的驻留机制

  • 什么叫字符串驻留机制呢?
    仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
  • 驻留机制的几种情况(交互模式)
    • 字符串的长度为0或1时
    • 符合标识符(由数字、下划线、字母组成,不能以数字开头,不能包含空格)的字符串
    • 字符串只在编译时进行驻留,而非运行时
    • [-5,256]之间的整数数字
  • sys中的intern方法强制2个字符串指向同一个对象
  • 在需要进行字符串拼接时建议使用 str类型的join方法,而非+ ,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高

字符串的查找

#index,如果找不到抛出ValueError
a = 'hello world'
print(a.index('l')) #2
print(a.index('l',3)) #3,指定起始的查找位置
#rindex,查找字符串最后一次出现的位置
print(a.rindex('l')) #9

#find,如果找不到元素,不是报错,而是返回-1
print(a.find('l')) #2
print(a.find('l',3)) #3,指定起始的查找位置
#rfind,查找字符串最后一次出现的位置
print(a.rfind('l')) #9

#切片,索引与列表相同
print(a[0]) #h,字符串类型

字符串的修改

  • 字符串不可修改,如果需要修改字符串,那么需要调用字符串内置的方法并且重新赋值(id都变了
  • 修改
#replace
a = 'hello world'
print(a,id(a)) #hello world 1706091134704
b = a.replace('o','e') #字符串中需要修改几个就修改几个
print(b,id(b)) #helle werld 1706091134832
c = a.replace('o','e',1) #可以限制修改次数,从前往后
print(c) #helle world

#join
print('-'.join(['hello','world'])) #hello-world,将列表或元组中的字符串连接成一个字符串
print('-'.join('python')) #p-y-t-h-o-n
  • 大小写修改
#upper
a = 'hello world'
b = a.upper() #将小写字母全部变成大写
print(b,id(b)) #HELLO WORLD 2592704413360

#lower
c = b.lower() #将大写字母全部变成小写
print(c,id(c)) #hello world 2592704413552

#swapcase
a1 = 'hELlo WoRld'
b1 = a1.swapcase() #将小写字母全部变成大写,将大写字母全部变成小写
print(b1) #HelLO wOrLD

#capitalize
c1 = a1.capitalize() #字符串首字母大写,其余转为小写
print(c1) #Hello world

#title
d1 = a1.title() #每个单词首字母大写,其余转为小写
print(d1) #Hello World
  • 对齐
#center
a = 'hello world'
print(a.center(19)) #□□□□hello world□□□□,居中对齐,第一个参数指定宽度,第二个参数(可选)指定填充符,默认是空格
print(a.center(19,'*')) #****hello world****
print(a.center(10)) #hello world,宽度小于原字符串宽度则返回原字符串

#ljust
print(a.ljust(15)) #hello world□□□□,左对齐,第一个参数指定宽度,第二个参数(可选)指定填充符,默认是空格
print(a.ljust(15,'*')) #hello world****
print(a.ljust(10)) #hello world,宽度小于原字符串宽度则返回原字符串

#rjust
print(a.rjust(15)) #□□□□hello world,右对齐,第一个参数指定宽度,第二个参数(可选)指定填充符,默认是空格
print(a.rjust(15,'*')) #****hello world
print(a.rjust(10)) #hello world,宽度小于原字符串宽度则返回原字符串
print('-1'.rjust(5)) #   -1

#zfill
print(a.zfill(15)) #0000hello world,右对齐,左边用0填充,只接收一个参数指定宽度
print(a.zfill(10)) #hello world,宽度小于原字符串宽度则返回原字符串
print('-1'.zfill(5)) #-0001
  • 去除空格
#strip,去除字符串两端的空格
a = ' hello world '
f = a.strip()
print(f) #hello world
#lstrip,去除左边的空格
g = a.lstrip()
print(g) #hello world□ 
#rstrip,去除右边的空格
h = a.rstrip()
print(h) #□hello world

字符串的切割

#split
a = 'hello world'
b =a.split() #对字符串进行切割,从左开始,默认以空格作为分割符
print(b) #['hello', 'world'] #切割之后的元素会放在一个列表当中,可与join()连用
c = a.split('l') #以'l'作为分割符
print(c) #['he', '', 'o wor', 'd'](''为两个l之间的)
d = a.split('l',maxsplit=1) #指定切割次数,maxsplit可以省略
print(d) #['he', 'lo world']
#还可以以单词作为切割符

#rsplit
b =a.rsplit() #可以对字符串进行切割,从右开始
print(b) #['hello', 'world']
c = a.rsplit('l')
print(c) #['he', '', 'o wor', 'd']
d = a.rsplit('l',maxsplit=1)
print(d) #['hello wor', 'd']

字符串的判断

#isalpha
print('hello我'.isalpha()) #True,判断是否全由字母组成
print('hello world'.isalpha()) #False,有空格

#isdigit,判断是否全是数字组成
print('123'.isdigit()) #True
print('123'.isdigit()) #True
print(b'123'.isdigit()) #True,二进制
print('123.5'.isdigit()) #False
print('123一'.isdigit()) #False
print('ⅠⅡⅢ'.isdigit()) #False

#isdecimal,判断是否由十进制的数字组成
print('123'.isdecimal()) #True
print('123'.isdecimal()) #True
print(b'123'.isdecimal()) #AttributeError,二进制
print('123.5'.isdecimal()) #False
print('123一'.isdecimal()) #False
print('ⅠⅡⅢ'.isdecimal()) #False

#isnumeric,判断是否全部由数字组成
print('123'.isnumeric()) #True
print('123'.isnumeric()) #True
print(b'123'.isnumeric()) #AttributeError,二进制
print('123.5'.isnumeric()) #False
print('123一'.isnumeric()) #True
print('ⅠⅡⅢ'.isnumeric()) #True

#islower
b = 'abc'
print(b.islower()) #True,判断是否全是小写

#isupper
c = 'ABC'
print(c.isupper()) #True,判断是否全是大写

#isidentifier
print('hello.world'.isidentifier()) #False,判断是否是合法的标识符
print('张三'.isidentifier()) #True

#isalnum
print('abc123'.isalnum()) #True,判断是否全部由数字和字母组成
print('张三123'.isalnum()) #True

字符串的转义(print解析才有用)

  • 换行符:\n
  • 水平制表符:\t(python中8个字符对齐)
  • 退格键(删除键):\b
print('hello\bworld') #hellworld
  • 一个空格:\0
  • 取消转义:\
print('hello\\nworld') #hello\nworld
  • 输出网址:\\\\
print('http:\\www.baidu.com') #http:\www.baidu.com
print('http:\\\\www.baidu.com') #http:\\www.baidu.com
  • 统一取消转义:r或R
    注意:原始字符串最后的内容不能是一个反斜杠,可以是两个反斜杠
print(r'hello\nworld') #hello\nworld
print(R'hello\nworld') #hello\nworld
  • 单引号:\’
print('妈妈说:\'吃饭了\'') #妈妈说:'吃饭了'
  • 双引号:\"
  • return:\r
print('hello\rworld') #world
  • 系统提示音:\a

字符串的编码

  • encode编码,默认utf-8
  • decode解码,默认utf-8
  • 以什么格式编码就以什么格式解码
print('你好'.encode()) #b'\xe4\xbd\xa0\xe5\xa5\xbd'
print('你好'.encode('utf-8')) #b'\xe4\xbd\xa0\xe5\xa5\xbd'
print('你好'.encode(encoding='utf-8')) #b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode()) #你好
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf-8')) #你好
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode(encoding='utf-8')) #你好

字符串的比较

  • 比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
  • 比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以 得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值