文章目录
- 【Python】第八部分 字符串
- 8. 字符串
- 8.1 字符串的创建和驻留机制
- 8.2 字符串的查询操作
- 8.3 字符串的大小写转换操作
- 8.4 字符串的内容对齐操作
- 8.5 字符串的劈分(拆分)操作
- 8.6 字符串判断的相关操作
- 8.7 字符串替换和合并操作
- 8.8 字符串比较操作
- 8.9 格式化字符串
- 总结
8. 字符串 8.1 字符串的创建和驻留机制
Python的驻留机制: 对于相同的字符串只会拷贝一份,后续创建相同的字符串时,不会开辟新的空间,而是把该字符串的地址赋给新创建的变量.
驻留机制的优缺点:当需要相同的字符串的时候,可以直接从字符池里拿来使用,避免了频繁的创建和销毁,提升效率和节约内存空间,所以修改字符串或者是
拼接字符串是比较影响性能的在需要进行字符串拼接时建议str中的join方法**,因为join()会先去计算字符串总的长度,然后在进行拷贝,只创建一次对象,效率比 + 好.
8.2 字符串的查询操作
- index() 查找该字符串在字符串中第一次出现的位置,如果找不到则报错
- rindex() 查找该字符串在字符串中最后一次出现的位置,如果找不到则报错
- find() 查找该字符串在字符串中第一次出现的位置,如果找不到则返回-1
- rfind() 查找该字符串在字符串中最后一次出现的位置,如果找不到则返回-1
# 1.index()
# 查找该字符串在字符串中第一次出现的位置,如果找不到则报错
str1 = 'hello world'
print(str1.index('l')) # 2
# 2.rindex()
# 查找该字符串在字符串中最后一次出现的位置,如果找不到则报错
print(str1.rindex('l')) # 9
# 3.find()
# 查找该字符串在字符串中第一次出现的位置,如果找不到则返回-1
print(str1.find('l')) # 2
# 4.rfind()
# 查找该字符串在字符串中最后一次出现的位置,如果找不到则返回-1
print(str1.rfind('l')) # 9
8.3 字符串的大小写转换操作
- upper() 大写
- lower() 小写
- swapcase() 大小写互相转换
- capitalize() 第一个字符为大写,其他都为小写
- title() 每个单词的首字符都变大写,其他的都是小写
str2 = 'hello world' # 1. upper() 把字符串中的所有字符都转换为大写 print(str2.upper()) # 2. lower() 把字符串中的所有字符都转换为小写 print(str2.lower()) # 3. swapcase() 把字符串中的大写变小写,小写变大写 print(str2.swapcase()) # 4. capitalize() 第一个字符为大写,其他都为小写 print(str2.capitalize()) # 5. title() 把每个单词的首字符都变大写,其他的都是小写 print(str2.title()) # 以上的方法都会创建一个新的字符串对象,不会对原字符进行修改 print(str2) # hello world
8.4 字符串的内容对齐操作
# 1.center() # 居中对齐,可以传两个参数,第一个参数是指定宽度,第二个参数是指定填充符,第二个参数可选,默认为空格 # 会创建一个新的字符串对象,不会对原字符进行修改 # 如果设置的宽度小于原来的宽度则返回原字符串 str3 = 'hello world!' print(str3.center(24, '*')) # ******hello world!****** # 2.ljust() # 左对齐,可以传两个参数,第一个参数是指定宽度,第二个参数是指定填充符,第二个参数可选,默认为空格 # 会创建一个新的字符串对象,不会对原字符进行修改 # 如果设置的宽度小于原来的宽度则返回原字符串 print(str3.ljust(20, '*')) # hello world!******** # 3.rjust() # 右对齐,可以传两个参数,第一个参数是指定宽度,第二个参数是指定填充符,第二个参数可选,默认为空格 # 会创建一个新的字符串对象,不会对原字符进行修改 # 如果设置的宽度小于原来的宽度则返回原字符串 print(str3.rjust(20, '*')) # ********hello world! # 4.zfill() # 右对齐,只传一个参数,该参数指定宽度,左边会用0进行填充 # 会创建一个新的字符串对象,不会对原字符进行修改 # 如果设置的宽度小于原来的宽度则返回原字符串 print(str3.zfill(20)) # 00000000hello world!
8.5 字符串的劈分(拆分)操作
- split() 从左边开始拆分,默认以空格进行拆分
- rsplit() 从右边开始拆分,默认以空格进行拆分
# 1. split() # 从左边开始拆分,默认以空格进行拆分 # 可以通过sep参数指定分隔符,maxsplit指定最大分隔次数,分隔后返回的是列表 str4 = 'hello world hello python' print(str4.split(), type(str4.split())) str5 = 'hello|world|hello|python' print(str5.split(sep='|', maxsplit=2), type(str5.split(sep='|'))) # 2. rsplit() # 从右边开始拆分,默认以空格进行拆分 # 可以通过sep参数指定分隔符,maxsplit指定最大分隔次数,分隔后返回的是列表 str4 = 'hello world hello python' print(str4.rsplit(), type(str4.rsplit())) str5 = 'hello|world|hello|python' print(str5.rsplit(sep='|', maxsplit=2), type(str5.rsplit(sep='|')))
8.6 字符串判断的相关操作
- isidentifier() 判断字符串是否是合法的标识符
- isspace() 判断字符串是否全部都是由空白符组成(水平制表符,换行,回车)
- isalpha() 判断字符串是否全部都是由字母组成
- isdecimal() 判断字符串是否全部都是由十进制组成
- isnumeric() 判断字符串是否全部都是由数字组成
- isalnum() 判断字符串是否全部都是由数字和字母组成
# 1. isidentifier() 判断字符串是否是合法的标识符 str6 = "hello" print(str6.isidentifier()) # True # 2. isspace() 判断字符串是否全部都是由空白符组成(水平制表符,换行,回车) print(str6.isspace()) # Fasle # 3. isalpha() 判断字符串是否全部都是由字母组成 print((str6.isalpha())) # True # 4. isdecimal() 判断字符串是否全部都是由十进制组成 print(str6.isdecimal()) # False # 5. isnumeric() 判断字符串是否全部都是由数字组成 print(str6.isnumeric()) # False # 6. isalnum() 判断字符串是否全部都是由数字和字母组成 print(str6.isalnum()) # True
8.7 字符串替换和合并操作
# 1. 替换 replace()
# 第一个参数为要被替换的字符串,第二个为替换的字符串,第三个参数用来指定最大的替换次数
str7 = 'hello world'
print(str7.replace('hello', 'hi'))
# 2. 合并 字符.join()
# 将列表或者是元组合并成一个字符串
str8 = ['hello', 'world', 'hhh']
print('|'.join(str8)) # hello|world|hhh
str9 = ('hello', 'python', 'hi')
print(' '.join(str9)) # hello python hi
print('-'.join('python')) # p-y-t-h-o-n
8.8 字符串比较操作
比较的规则:首先比较两个字符串中的第一个字符,如果相等则继续向后面进行比较
直到不相等,则后续的字符不再进行比较.
比较的原理:两个字符在进行比较的时候,比较的其实是ordinal value(原始值),
可以调用内置函数ord()得到指定字符的ordinal value。内置函数ord()对应的内置
函数chr(),是它的逆操作,通过ordinal value可以得到对应的字符.
print(ord('a'), ord('b')) # 97 98
print(chr(97), chr(98)) # a b
a = 'Python'
b = 'Python'
print(a == b) # 比较的value
print(a is b) # 比较的是id
# 字符串切片操作
# 和之前的切片是一样的
str10 = 'hello,world!'
# 默认是从0开始,步长为1
print(str10[:5:]) # hello
print(str10[6::]) # world!
str11 = str10[:5:]
str12 = str10[6::]
str13 = str11 + '-' + str12
print(str13) # hello-world!
8.9 格式化字符串
# 1. % 占位符写法
# %i或者%d : 整型的占位符
# %f : 浮点型
# %s : 字符串
name = 'Jack'
age = 18
print('我叫%s,今年%d岁!' % (name, age)) # 我叫Jack,今年18岁!
print('%d' % 99) # 99
print('%10f' % 3.1415926) # 10表示的是宽度
print('%.3f' % 3.1415926) # 保留小数点后3位
print('%10.3f' % 3.1415926)
# 2. {} 占位符写法
# {}里的0和1表示的是索引
print('我叫{0},今年{1}岁!'.format(name, age)) # 我叫Jack,今年18岁!
print('我叫{1},今年{0}岁!'.format(name, age)) # 我叫18,今年Jack岁!
print('{0:.3f}'.format(3.1415926)) # 保留小数点后3位
print('{0:10f}'.format(3.1415926)) # 10表示的是宽度
print('{0:10.3f}'.format(3.1415926))
# 3. f-string写法
print(f'我叫{name},今年{age}岁!') # 我叫Jack,今年18岁!
# 字符串的编码和解码
# 编码:把字符串转换为二进制的数据 (encode)
# 解码:把二进制的数据转换为字符串类型 (decode)
str14 = '海上生明月'
byte = str14.encode(encoding='UTF-8')
print(byte) # b'xe6xb5xb7xe4xb8x8axe7x94x9fxe6x98x8exe6x9cx88'
print(byte.decode(encoding='UTF-8')) # 海上生明月
总结
以上就是今天要讲的内容,希望对大家有所帮助!!!



