目录
字符串的驻留机制
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'))#解码 注意编码和解码的格式必须一致