【Python】第八部分 字符串
文章目录
8. 字符串
8.1 字符串的创建和驻留机制
Python的驻留机制: 对于相同的字符串只会拷贝一份,后续创建相同的字符串时,不会开辟新的空间,而是把该字符串的地址赋给新创建的变量.
驻留机制的优缺点:当需要相同的字符串的时候,可以直接从字符池里拿来使用,避免了频繁的创建和销毁,提升效率和节约内存空间,所以修改字符串或者是
拼接字符串是比较影响性能的在需要进行字符串拼接时建议str中的join方法**,因为join()
会先去计算字符串总的长度,然后在进行拷贝,只创建一次对象,效率比 +
好.
8.2 字符串的查询操作
index()
查找该字符串在字符串中第一次出现的位置,如果找不到则报错rindex()
查找该字符串在字符串中最后一次出现的位置,如果找不到则报错find()
查找该字符串在字符串中第一次出现的位置,如果找不到则返回-1rfind()
查找该字符串在字符串中最后一次出现的位置,如果找不到则返回-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'\xe6\xb5\xb7\xe4\xb8\x8a\xe7\x94\x9f\xe6\x98\x8e\xe6\x9c\x88'
print(byte.decode(encoding='UTF-8')) # 海上生明月
总结
以上就是今天要讲的内容,希望对大家有所帮助!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82893.html