Python中字符串
一:字符串的驻留机制
二:字符串的常用操作
三:字符串的比较
四:字符串的切片操作
五:格式化字符串
六:字符串的编码转换
一:字符串的驻留机制
仅保留一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python中的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。
二:字符串的常用操作
①:字符串的查询操作
s='hello,hello'
print(s.index('lo'))
print(s.find('lo'))
print(s.rindex('lo'))
print(s.rfind('lo'))
Index:查找字串第一次出现的位置,不出现则出ValueError
rindex:查找最后一次出现的位置,也是查找不到出ValueError
Find:查找第一次出现的位置,如果不存在,返回-1
Rfind:查找最后一次出现的位置,如果不存在,返回-1
②:字符串的大小写转换操作
s='hello,python'
a=s.upper()
print(a,id(a))
print(s,id(s))
b=s.lower()
print(b,id(b))
print(s,id(s))
print(b==s)
print(b is s)
s2='hello,Python'
print(s2.swapcase())
print(s2.title())
upper():所有转成大写
lower():所有转成小写
swapace():大写变小写,小写变大写
title():把每个单词的第一个字符转换成大写,剩余的转换成小写。
③:字符串内容对齐操作的方法
Ⅰ:center():居中对齐
s='hello,Python'
print(s.center(20,'*'))
目测s有10多个字母,给一个20的长度,其余位置填充*,把s居中了。
Ⅱ:左右对齐
左对齐:ljust()
s='hello,Python'
print(s.ljust(20,'*'))
右对齐:rhust()
s='hello,Python'
print(s.rjust(20,'*'))
Ⅲ:右对齐,其余位置补0
zfill():
s='hello,Python'
print(s.zfill(20))
④:字符串的分割
Ⅰ:split()从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值是一个列表,通过sep指定劈分字符串,通过maxsplit指定劈分字符串时的最大劈分次数。
Ⅱ:rsplit()从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值是一个列表,通过sep指定劈分字符串,通过maxsplit指定劈分字符串时的最大劈分次数。
s='hello world Python'
lst=s.split()
print(list)
s1='hello|world|Python'
print(s1.split(sep='|'))
print(s1.split(sep='|',maxsplit=1))
print('-------------------')
#rsplit()从右侧开始劈分
print(s.rsplit())
print(s1.rsplit('|'))
print(s1.rsplit(sep='|',maxsplit=1))
⑤:判断字符串的方法
isidentifier():判断是不是合法的标识符
isspace():判断是否全部由空白字符组成
isalpha():判断是否全部由字母组成
isdecimal():判断是否全部由十进制的数字组成
isnumeric():判断是否全部由数字组成
isalnum():判断是否全部由字母和数字组成
s='hello,Python'
print('1.',s.isidentifier() )#False
print('2.','hello'.isidentifier() )#True
print('4.','张三_123'.isidentifier() )#True
(随便举几个哈)
⑥:字符串的替换
replace()
s='hello,Python'
print(s.replace('Python','Jave'))
s1='hello,Python,Python,Python'
print(s1.replace('Python','Java',2))
第一个是将Python替换成Java
第二个是将前两个Python替换成Java
⑦:字符串的增加
t=('hello','Java','Python')
print('*',join(t))
三:字符串的比较
常见的><=
print('apple'>'app')#True
print('apple'>'banana')#False
print(ord('a'),ord('b'))
四:字符串的切片操作
不具备增删改的操作
切片将产生新的对象
s='hello,Python'
s1=s[:5]
s2=s[6:]
s3='!'
newstr=s1+s2+s3
print(s1)
print(s2)
print(newstr)
将会产生hello
Python和hello,Python!
还可以选择切片
s='hello,Python'
print(s[1:5:1])
ello
五:格式化字符串
按一定方式输出
name='张三'
age=20
print('我叫%s,今年%d岁' % (name,age))
输出为我叫张三,今年20岁
还有其他两种
name='张三'
age=20
print('我叫%s,今年%d岁' % (name,age))
print('我叫{0},今年{1}岁'.format(name,age))
print(f'我叫{name},今年{age}岁')
六:字符串的编码编码转换
编码:
s='天涯共此时'
print(s.encode(encoding='GBK'))
print(s.encode(encoding='UTF-8'))
在第一种编码格中,一个中文占两个字节,第二种编码格中,一个中文占三个字节
结果为:
b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1'
b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'
解码:
s='天涯共此时'
byte=s.encode(encoding='GBK')
print(byte.decode(encoding='GBK'))
byte=s.encode(encoding='UTF-8')
print(byte.decode(encoding='UTF-8'))
解出来就是天涯共此时