10.21字符串

本文详细介绍了Python字符串的各种操作,包括驻留机制、查找、大小写转换、对齐、劈分、判断、替代与合并、比较、切片、格式化以及编码解码。通过实例展示了如何使用这些操作,并解释了它们的工作原理。对于字符串的不可变性以及在内存中的处理方式也进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

字符串的驻留机制

字符串的查找

字符串大小写的转换

字符串的对齐操作

字符串的劈分操作

字符串的相关判断

字符串的替代与合并

字符串的比较操作

字符串的切片操作

字符串的格式化

字符串的编码和解码


字符串的驻留机制

python只会保存一份且不可改变的字符串,不同的值被放在驻留池中。如果后续产生相同的值,则不会开辟新的空间,而会把原字符串的地址拷贝给变量

a='python'
b="python"
c=''python''
print(a,id(a))
print(b,id(b))
print(c,id(c))
#输出的都是python 2343774239664

字符串的查找

index查找子串第一次出现的位置

如果没找到,则报错

rindex查找子串最后一次出现的位置如果没找到,则报错
find查找子串第一次出现的位置如果没找到,则输出-1
rfind查找子串最后一次出现的位置如果没找到,则输出-1
#字符串的查找
a='hello,hello'
print(a.find('lo'))#输出3 子串第一次出现的位置
print(a.index('lo'))#输出3

print(a.rfind('lo'))#输出9 子串最后一次出现的位置
print(a.rindex('lo'))#输出9

print(a.find('k'))#-1 若查找不到,则输出-1
#print(a.index('k'))#报错! substring not found

字符串大小写的转换

upper

转换为大写字母

lower

转换为小写字母

swapcase

将原字符串中,

大写转换为小写,

小写转换为大写

title将每一个单词的第一个字母转为大写

!!!注意,由于字符串为不可变序列,所以这些操作均改变了标识;即开辟了一个新的内存空间储存新的字符串 

#字符串的大小写转换
a='hello,world'
b=a.upper()
print(a,id(a))
print(b,id(b))
#hello,world 2241825782768
#HELLO,WORLD 2241825782704
#标识发生改变,说明开辟了一个新的内存空间
c=b.lower()
print(c)

s='hello,Python'
d=s.swapcase()
print(d)#HELLO,pYTHON
e=s.title()
print(e)#Hello,Python

字符串的对齐操作

center居中

括号内接收两个参数,

一个为字符串所占的宽度,

如果设置的宽度小于字符串的宽度,则输出原字符串

一个为空白区域填充的字符,可以省略,

省略后则是空格代替

ljust左对齐
rjust右对齐
zfill右对齐

只接收一个参数,接收的是设置字符串的宽度

填充字符默认为0

#字符串对齐操作
#居中
s='hello,world'
print(s.center(40,'#'))###############hello,world###############
print(s.center(40))#              hello,world

#左右对齐操作
print(s.ljust(20,'*'))#hello,world*********
print(s.rjust(20,'*'))#*********hello,world

#zfill
print(s.zfill(20))#000000000hello,world

字符串的劈分操作

(r)split()

默认为从左开始劈分,

rsplit则是从右开始劈分

通过指定参数seq可以设置劈分的字符(默认为空格)
可以设置maxsplit参数,确定劈分的个数劈分完成后,剩下的作为一个字符串
最后返回类型为列表
#字符串的劈分操作
s='hello world'
s1=s.split()
print(s1)#['hello', 'world']
#默认劈分的字符是空格,用列表类型输出
#还可以规定劈分的字符
s='hello-world-python'
s1=s.split('-')
print(s1)#['hello', 'world', 'python']
#还可以通过设置maxsplit参数,改变最大劈分个数,劈分完成后,剩下的全部作为一个字符串
s2=s.split('-',maxsplit=1)
print(s2)
#相似的,rsplit可以做到从右侧开始劈分
s2=s.rsplit('-',maxsplit=1)
print(s2)

字符串的相关判断

isidentifier()

判断字符串是否为合法标识符

(只有数字,字母,下划线组成)

isspace()

判断字符串是否为空字符串

(制表符,换行符,空格)

isalpha()

判断字符串是否只由字母组成

isdecimal()

判断字符串是否都是十进制数

isnumeric()判断字符串是否都由数字组成
isalnum()判断字符串是否全部由数字和字母组成
s='hello,world'
print(s.isidentifier())#False
#不是一个合法的标识符
#合法的标识符只由字母,数字,下划线组成,但第一个字符不能是数字
s='zmd_jyt'
print(s.isidentifier())#True
s='is \t'
print(s.isspace())#False
#不是一个空白字符
#空白字符是由空格,制表符,换行等组成的
s='iloveu'
print(s.isalpha())#True
#是只由字母组成
s='2003'
print(s.isdecimal())#True
#判断是否全为十进制的数
s='818'
print(s.isnumeric())#True
#判断是否全部由数字组成
s='jyt628'
print(s.isalnum())#True
#判断是否全由数字和字母组成

字符串的替代与合并

replace()

第一个参数为被替代的字符

第二个参数为将要替代的字符

第三个参数(可省略)为最大替代个数

join()

将列表或者元组连接成一个字符串,

连接的字符放在最前端

#字符串的替代与合并
s='hello,python'
print(s.replace('python','java'))#hello,java
s='python,python,python,python'
print(s.replace('python','java',2))#java,java,python,python
#可以设置参数,控制最大替代的个数

lst=['hello','world']
print(''.join(lst))#helloworld
print('|'.join(lst))#hello|world

字符串的比较操作

== >= <= != < >

从字符串的第一个字符开始比较,比较字符的ASCII值

ord()获取字符的ASCII值
chr()

由ASCII值获取对应的字符

#字符串的比较
print('apple'>'app')#True
print('apple'<'banana')#True
print(ord('a'),ord('b'))#97 98
#ord()函数可以获取字符的ASCII的值
print(chr(97),chr(98))#a b
#chr()函数可以由ASCII值获取对应的字符
print(chr(128009))#🐉

#== 和 is的区别
#is比较的是标识是否相等
#==比较的是值是否相等
a=b='python'
c='python'
print(a==c)#True
print(a is c)#True
#字符串的驻留机制

字符串的切片操作

字符串和列表的唯一不同好是:列表是可变序列,可以进行增删改操作;而字符串为不可变序列,每进行一次增删改操作,都会开辟一个新的地址存储切片后的字符串

s='hello,python'
new_str=s[:5]+'!'+s[6:]
print(new_str)
print(id(s),id(new_str))#1481053289456 1481053337008

详情见列表的切片操作

!!!str[start:stop:step]中三个参数均可正可负,其中步长为负数表示从右侧开始切片

#字符串的切片操作(和列表一致)
s='hello,python'
print(s.replace(',','!'))
new_str=s[:5]+'!'+s[6:]
print(new_str)
print(id(s),id(new_str))#1481053289456 1481053337008
#s[start:stop:step]
#step为步长,可正可负,负数表示从右侧开始切片

字符串的格式化

1.%作为占位符

#1.%作为占位符
name='ikun'
year=2.5
print('我是%s,练习了%f年了'%(name,year))
print('%10d' %99)#10代表的是宽度
print('%.3f'%3.1415)#.3表示的是保留三位小数
print('%10.3f'%3.1415926)

2.{}作为占位符

#2.{}作为占位符
print('我是{0},练习了{1}年了'.format(name,year))
print('{0}'.format(3.1415926))
print('{0:.3}'.format(3.1415926))#3.14 保留三位有效数字
print('{0:.3f}'.format(3.1415926))#3.142 保留三位小数
print('{0:20f}'.format(3.1415926))#            3.141593 设置宽度为20

3.f_string

#3.f-string
print('我是{name},练习了{year}年了')

字符串的编码和解码

编码:将字符串转换为二进制数据类型(bytes)

解码:将bytes类型的数据转换为字符串类型

#字符串的编码和解码
#byte代表的是一个二进制数据(字节类型的数据)
s='鸡你太美'
new_s=s.encode(encoding='GBK') #编码 其格式为GBK类型
print(new_s.decode(encoding='GBK'))#解码 注意编码和解码的格式必须一致

new_s=s.encode(encoding='UTF-8') #编码 其格式为GBK类型
print(new_s.decode(encoding='UTF-8'))#解码 注意编码和解码的格式必须一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值