字符串
1.字符串的驻留机制
#字符串的驻留机制
a='hello'
b="hello"
c='''hello'''
print(a,id(a))
print(b,id(b))
print(c,id(c))
输出:
hello 2659185572144 hello 2659185572144 hello 2659185572144
id相同这说明对象a,b,c在内存当中只有一份
2.字符串的常用操作
a.查询操作
(1)index()
查找字符串substr第一次出现的位置(索引),如果查找的字符串不存在时,则会抛出Value Error
s='hello,hello'
print(s.index('o'))
输出:4
(2)rindex()
查找字符串substr最后一次出现的位置,如果查找的字符串不存在时,会抛出Value Error
s='hello,hello'
print(s.rindex('o'))
输出:10
(3)find()
查找字符串substr第一次出现的位置,如果查找的字符串不存在时,则返回-1
s='hello,hello'
print(s.find('o'))
输出:4
(4)rfind()
查找字符串substr最后一次出现的位置,如果查找的字符串不存在时,则返回-1
s='hello,hello'
print(s.refind('o'))
输出:10
b.大小写转换操作
(1)upper()
s='hello,hello' #转成大写之后,会产生一个新的字符串对象
a=s.upper()
print(a)
输出:HELLO,HELLO
(2)lower()
s='HELLO,HELLO'
a=s.lower() #同样也会产生一个新的字符串对象
print(a)
输出:hello,hello
(3)swapcase()
- 把字符串中所有大写字母转为小写字母,把所有小写字母都转成大写字母
s='Hello,Hello'
a=s.swapcase()
print(a)
输出:hELLO,hELLO
(4)capitalize()
s='heLLO,Hello'
a=s.capitalize()
print(a)
输出:Hello,hello
(5)title()
- 把每个单词的第一个字符转换成大写,把每个单词的剩余字符转换成小写
s='heLLO,Hello'
a=s.title()
print(a)
输出:Hello,Hello
c.内容对齐操作
(1).center()
- 居中对齐,第1个参数指定参数,第二个参数指定填充符,第2个参数是可选的,默认值是空格,如果设置宽度小于实际宽度则返回原字符
s='hello,baby'
print(s.center(20,'%'))
输出:%%%%%hello,baby%%%%%
(2).ljust()
- 左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符
s='hello,baby'
print(s.ljust(20,'%'))
输出:hello,baby%%%%%%%%%%
(3).rjust()
- 右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符
s='hello,baby'
print(s.rjust(20,'%'))
输出:%%%%%%%%%%hello,baby
(4).zfill()
- 右对齐,左边用0填充,该方法只接受一个参数,用于指定字符串的宽度,如果指定的宽度小于一等于字符串的长度,返回字符串本身
s='hello,baby'
print(s.zfill(20))
输出:0000000000hello,baby
d.劈分操作
(1)split()
-
从字符串 的左边开始劈分,默认的劈分字符时空格字符串,返回的值都是一个列表 a='hello,world'
lst=a.split()
print(lst)
输出:[‘hello,world’] -
以通过参数sep指定劈分字符串时的劈分符 a='hello world'
lst=a.split(sep='|')
print(lst)
输出:[‘hello world’] -
通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的字串会单独做成一部分 a='hello|world|ok'
lst=a.split(sep='|',maxsplit=1)
print(lst)
输出:[‘hello’, ‘world| ok’]
(2)rsplit()
-
从字符串的右边开始劈分,默认的劈分字符时空格字符串,返回的值都是一个列表 a='hello world ok'
print(a.rsplit())
输出:[‘hello’, ‘world’, ‘ok’] -
以通过参数sep指定劈分字符串时的劈分符 -
通过参数maxsplit指定劈分字符穿时的最大劈分次数,在经过最大次劈分之后,剩余的字串会单独做为一部分 a='hello|world|ok'
print(a.rsplit(sep='|',maxsplit=1))
输出:[‘hello|world’, ‘ok’]
e.判断字符串操作
(1).isidentifier()
(2).isspace()
(3).isalpha()
(4).isdecimal()
(5).isnumeric()
(6).isalnum()
f.字符串的替换与合并
(1).replace()
-
第1个参数指定被替换的子串,第2 个参数指定替换字串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化.调用该方法时可以通过第3个参数指定最大替换次数 s='hello,girl'
print(s.replace('girl','boy'))
输出:hello,boy s='hello,hello,hello,world'
print(s.replace('hello','ok',3)) #3表示最大替换次数
输出:ok,ok,ok,world
(2).join()
-
将列表或元组中的字符串合并成一个字符串 lst=['hello','flower','hi']
print('@'.join(lst))
输出:hello@flower@hi a='hello'
print('@'.join(a))
输出:h@e@l@l@o
3.字符串的比较
(图片转载网络)
print('apple'>'app')
print('apple'>'banana')
输出:True
False
怎么知道哪个字符更大呢?
我们可以比较它们的原始值
print(ord('a'),ord('b'))
输出: 97 98
4.字符串的切片操作
- 字符串不具备增,删,改等操作
- 切片操作将产生新的对象
s='hello,world'
s1=s[:5] #没有指定起始位置,默认从0 开始,默认步长为1
s2=s[6:] #没有指定结束位置,默认到末尾
s3='!'
new_str=s1+s3+s2
print(new_str)
输出:hello!world
5.格式化字符串
为什么需要格式化字符串?
在python中我们会遇到一个问题,问题是如何输出格式化的字符串。我们经常会输出类似’亲爱的xxx你好!您尾号xxxx卡快捷支付xx元,余额xxxx元’之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。
在python中,我们用%或{}实现格式化字符串。
(图片转载网络)
#第一种方式 %
name='张三'
age=20
print('我叫%s,今年%d岁'%(name,age))
输出:我叫张三,今年20岁
# 第二种方式 {}
name='张三'
age=20
print('我叫{0},今年{1}岁'.format(name,age))
输出:我叫张三,今年20岁
当然还有第三种方式
#第三种方式 f-string
name='张三'
age=20
print(f'我叫{name},今年{age}岁')
输出:我叫张三,今年20岁
我们还可以用格式化字符来表示宽度
print('%10d' % 100) #10表示宽度为10
print('helloworld')
输出:
同时可以表示精度
print('%.3f' % 3.1415926) #3表示保留三位,同时四舍五入
输出:3.142
也可以同时表宽度和精度
print('%10.3f' % 3.1415926)
输出:
? 3.142
6.字符串的编码转换
为什么需要字符串的变成转换?
(图片转载网络)
- 编码与解码的方式
- 编码:将字符串转换为二进制数据(bytes)
- 解码:将bytes类型的数据转换成字符串类型
s='一二三四五'
print(s.encode(encoding='GBK')) #在GBK这种编码格中,一个中文占两个字节
输出:
b’\xd2\xbb\xb6\xfe\xc8\xfd\xcb\xc4\xce\xe5’
其中‘b’表示的是二进制
s='一二三四五'
print(s.encode(encoding='UTF-8'))
#在UTF-8这种编码格中,一个中文占三个字节
输出:
b’\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89\xe5\x9b\x9b\xe4\xba\x94’
那我们怎么进行解码呢?
#解码
s='一二三四五'
byte=s.encode(encoding='GBK') #编码
print(byte.decode(encoding='GBK')) #解码
输出:一二三四五
注意:编码格式要与解码格式相同
|