目录
字符串属于不可变有序序列
字符串使用单引号、双引号、三单引号或三双引号作为定界符,且不同定界符之间可以相互嵌套。
字符串str按不同编码方式转化为二进制字节串bytes称为编码过程encode()
二进制字节串bytes转换为对应编码方式的字符串str称为解码过程decode()
>>> str = "我是Superman!"
>>> str_GBK_bytes = str.encode('GBK') #GBK编码方式,编码过程
>>> str_GBK_bytes
b'\xce\xd2\xca\xc7Superman!'
>>> str_GBK = str_GBK_bytes.decode('GBK') #GBK编码方式,解码过程
>>> str_GBK
'我是Superman!'
不同编码格式之间相差很大,采用不同的编码格式意味着不同的表示和存储形式。如果解码方法不正确就无法还原信息,使用字符串编码也具有加密效果。
字符串的转义与原始字符串
参考资料chttps://blog.csdn.net/tangdaxue43/article/details/86661132
为了避免对字符串中转义字符串进行转义,可以使用原始字符串,在字符串前面加上字母r或R表示元素字符串,其中的所有字符串都表示原始的含义而不会进行任何的转义。
字符串的格式化
format方法格式化字符串
%(占位符)方法格式化字符串
字面量格式化字符串,简称f-string,python3.6.x开始支持,在字符串之前加字母f,含义format类似。
字符串的创建
使用赋值运算符"="将一个字符串赋值给变量
>>>str1 = "hello world"
>>>str1
'hello world'
字符串的读取
索引读取一个字符:字符串名[索引] ,索引越界报错
切片读取子串:字符串名[开始索引:结束索引:步长],返回新字符串
方法与列表,元组类似
>>> str1 = "我是Superman!"
>>> str[3]
'u'
>>> str[0:5:2]
'我Sp'
字符串定位与字串计数
find()方法:用于查找一个字符串在另一个字符串指定范围中(默认整个字符串)首次出现的位置,若不存在则返回-1
一般形式:字符串名.find(指定字符串,start=0,end=len(string))
>>>str1 = "apple,peach,banana,peach,pear"
>>> str1.find("peach")
6
>>> str1.find("peach",7)
19
>>> str1.find("peach",7,20)
-1
rfind()方法:用于查找一个字符串在另一个字符串指定范围中(默认整个字符串)最后一次出现的位置,若不存在则返回-1
>>> str1 = "apple,peach,banana,peach,pear"
>>> str1.rfind("p")
25
>>> str1.rfind("k")
-1
index()方法:用来返回一个字符串在另一个字符串指定范围中首次出现的索引,若不存在则报异常
一般形式:字符串名.index(指定字符串,start=0,end=len(string))
>>> str1 = "apple,peach,banana,peach,pear"
>>> str1.index("p")
1
>>> str1.index("pe")
6
>>> str1.index("pea")
6
>>> str1.index("peac")
6
>>> str1.index("each")
7
>>> str1.rindex("k") #范围内不存在k,报错
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
str1.rindex("k")
ValueError: substring not found
rindex()方法:用来返回一个字符串在另一个字符串指定范围中最后一次出现的索引,若不存在则报异常
>>> str1 = "apple,peach,banana,peach,pear"
>>> str1.rindex("pe")
25
>>> str1.rindex("pe",7,16)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
str1.rindex("pe",7,16)
ValueError: substring not found
count()方法:用于返回子字符串在字符串中出现的次数
>>> str1 = "apple,peach,banana,peach,pear"
>>> str1.count("p")
5
>>> str1.count("pp")
1
>>> str1.count("ppp")
0
字符串的分割
sen:分隔符,省略为任何空白符号(空格、换行符、制表符等),连续多个空白字符看作一个分隔符
num:最大分割次数,默认-1。即分隔所有
split()方法:用来以指定字符为分隔符,把字符串从左往右分成多个字符串,并返回包含分隔结果的列表
一般形式:字符串名.split([sen][,num])
str1 = "apple,peach,banana,peach,pear"
>>> str1.split(",") #以逗号为分隔符
['apple', 'peach', 'banana', 'peach', 'pear']
>>> str1.split("e") #以e为分隔符
['appl', ',p', 'ach,banana,p', 'ach,p', 'ar']
rsplit()方法:用来以指定字符为分隔符,把字符串从右往左分成多个字符串,并返回包含分隔结果的列表
一般形式:字符串名.rsplit([sen][,num])
str1 = "apple,peach,banana,peach,pear"
>>> str1.rsplit(",") #以逗号为分隔符
['apple', 'peach', 'banana', 'peach', 'pear']
>>> str1.rsplit("a") #以a为分隔符,注意开头
['', 'pple,pe', 'ch,b', 'n', 'n', ',pe', 'ch,pe', 'r']
>>> str1.rsplit("r") #以r为分隔符
['apple,peach,banana,peach,pea', '']
partition()方法:用来以指定字符串作为分隔符,将原来的字符串分隔成三部分,如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串
一般形式:字符串名.partition(str)
str1 = "apple,peach,banana,peach,pear"
>>> str1.partition(",") #以从左到右第一个逗号分隔
('apple', ',', 'peach,banana,peach,pear')
>>> str1.partition("e") #以从左到右第一个e分隔
('appl', 'e', ',peach,banana,peach,pear')
>>> str1.partition("a") #以从左到右第一个a分隔
('', 'a', 'pple,peach,banana,peach,pear')
>>> str1.partition("k") #指定字符串不存在
('apple,peach,banana,peach,pear', '', '')
rpartition()方法:用来以指定字符串作为分隔符,将原来的字符串分隔成三部分,如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串
一般形式:字符串名.rpartition(str)
str1 = "apple,peach,banana,peach,pear"
>>> str1.rpartition(",") #以从右到左第一个逗号分隔
('apple,peach,banana,peach', ',', 'pear')
>>> str1.rpartition("e") #以从右到左第一个e分隔
('apple,peach,banana,peach,p', 'e', 'ar')
>>> str1.rpartition("a") #以从右到左第一个a分隔
('apple,peach,banana,peach,pe', 'a', 'r')
>>> str1.rpartition("k") #指定字符串不存在
('', '', 'apple,peach,banana,peach,pear')
连接序列元素成字符串
join()方法:用于返回通过指定字符连接序列中元素后生成的新字符串
一般形式:“指定连接符”.jion(字符串)
>>> li = ["apple","peach","banana","peach","pear"]
>>> "?".join(li) #以?作为连接符
'apple?peach?banana?peach?pear'
应用:使用split()、join()方法删除字符串中多余的空白字符,连续多个空白字符只保留一个
>>> str1 = "aaa bb c d e fffffff"
>>> " ".join(str1.split())
'aaa bb c d e fffffff'
字符串的大小写切换
lower()方法:把字符串中的字母变为小写
upper()方法:把字符串中的字母变为大写
capitalize()方法:字符串首字母大写
title()方法:每个单词的首字母大写
swapcase()方法:大小写互换
>>> str1 = "What Is You Name"
>>> str1.lower() #返回小写字符串
'what is you name'
>>> str1.upper() #返回大写字符串
'WHAT IS YOU NAME'
>>> str1.capitalize() #字符串首字母大写
'What is you name'
>>> str1.title() #每个单词首字母大写
'What Is You Name'
>>> str1.swapcase() #大小写互换
'wHAT iS yOU nAME'
字符串的替换
replace()方法:实现替换功能 #形成新的字符串
一般形式:字符串名.replace(old,new[,max])
old:将被替换的字符串
new:用于替换old字符串的新字符串
max:可选字符串,替换不超过max次
>>> str1 = "中国,中国"
>>> str1.replace("中国","中华人民共和国")
'中华人民共和国,中华人民共和国'
>>> str1 #原字符串不变
'中国,中国'
>>> str2 = str1.replace("中国","中华人民共和国")
>>> str2
'中华人民共和国,中华人民共和国'
>>> str3 = str1.replace("中国","中华人民共和国",1)
>>> str3
'中华人民共和国,中国'
maketrans()方法:用来生成字符映射表
一般形式:字符串名.maketrans(intab,outtab)
translate()方法:用来根据字符映射表中定义的对应关系转换字符串并替换其中的字符
一般形式:字符串名.translate(table)
maketrans()方法和translate()方法相结合可以同时处理多个字符
>>> table = ''.maketrans('123456','abcdef') #创建映射关系,一一对应
>>> str1 = "43142343454"
>>> str1.translate(table) #按照映射关系,将字符串一一替换,无对应映射关系则不变
'dcadbcdcded'
字符串删除首尾
strip()方法:用于移除字符串头尾指定字符(默认为空格)或字符串序列,头尾同时进行
一般形式:字符串名.strip([chars])
rstrip()方法:用于移除字符串右侧指定字符(默认为空格)或字符串序列
lstrip()方法:用于移除字符串左侧指定字符(默认为空格)或字符串序列
这三种方法的指定参数并不作为一个整体对待,而是在删除过程中往复循环删除字符串首尾中符合指定字符的所有字符,一层一层的从外往里删除,直到没有符合条件的字符
>>> str1 = " abc "
>>> str1.strip() #无指定参数,默认去除首尾空格
'abc'
>>> '\n\nhello world \n\n'.strip() #删除空白字符
'hello world'
>>> 'aaasssdddfff'.strip('a') #删除首尾的a
'sssdddfff'
>>> 'sssdddggg'.strip('g') #删除首尾的g
'sssddd'
>>> 'sssfdddgggssww'.strip('ws') #删除首尾的w和s
'fdddggg'
>>> 'sssfdddgggssww'.strip('sw') #指定参数顺序不影响输出结果
'fdddggg'
>>> 'sssaaasss'.rstrip("s") #删除右侧的s
'sssaaa'
>>> 'sssaaasss'.lstrip("s") 删除左侧的s
'aaasss'
>>> 'sssaaasssas'.strip('sa') #删除首尾的s和a
''
>>> 'absssdaaffg'.strip('af') #f不在首尾,所以不删除
'bsssdaaffg'
字符串的判断首尾
startswith()方法:判断字符串是否以指定字符串开始,返回True或False
一般形式:字符串名.startswith(string,开始索引,结束索引)默认整个字符串
endswith()方法:判断字符串是否以指定字符串结束,返回True或False
一般形式:字符串名.endswith(string,开始索引,结束索引)默认整个字符串
因为文件后缀固定,所以endswith()函数可以用于判断文件类型
>>> str1 = '123abc'
>>> str1.startswith ("1") #默认检索整个字符串
True
>>> str1.startswith('1',4) #指定检索起始位置
False
>>> str1.startswith("1",0,4)
True
字符串的判断构成
isalnum()方法:判断字符串是否由字母和数字组成
isalpha()方法:判断字符串是否只由字母组成
isdigit()方法:判断字符串是否只由数字组成
isdecimal()方法:判断字符串是否只包含十进制字符。这种方法只存在于unicode对象。
isnumeric()方法:判断字符串是否只由数字组成。这种方法是只针对unicode对象。支持汉字数字,罗马数字
isspace()方法:判断字符串是否为只由空白字符组成
isupper()方法:判断字符串是否为只由大写字母组成
islower()方法:判断字符串是否为只由小写字母组成
一般形式均为:字符串名.函数()
isdigit()、isdecimal()、isnumeric()的区别
isdigit():
True:Unicode数字(字节数字),byte数字(单字节),全角数字(双字节)
False:罗马数字、汉字数字、小数
Error:无
isdecimal():
True:Unicode数字(字节数字),全角数字(双字节)
False:罗马数字、汉字数字、小数
Error:byte数字(单字节)
isnumeric():
True:Unicode数字(字节数字),全角数字(双字节)、罗马数字、汉字数字、
False:小数
Error:byte数字(单字节)
>>> '123abc'.isalnum () #判断字符串是否由字母和数字组成,是则返回True
True
>>> '123abc'.isalpha() #判断字符串是否只由字母组成,不是则返回False
False
>>> 'abcd'.isalpha () #判断字符串是否只由字母组成,是则返回True
True
>>> '1234.0'.isdigit () #判断字符串是否只由数字组成,不是则返回False
False
>>> '1234'.isdigit () #判断字符串是否只由数字组成,是则返回True
True
>>> '九'.isnumeric () #判断字符串是否只由数字组成,支持汉字数字
True
>>> '九'.isdigit () #判断字符串是否只由数字组成,不支持汉字数字
False
>>> '九'.isdecimal () #判断字符串是否只包含十进制字符
False
>>> 'ⅠⅣⅧ'.isdecimal () #判断字符串是否只包含十进制字符
False
>>> 'ⅠⅣⅧ'.isdigit () #判断字符串是否只由数字组成
False
>>> 'ⅠⅣⅧ'.isnumeric () #判断字符串是否只由数字组成,支持罗马数字
True
字符串的对齐方式
width:字符串总长度
fillchar:填充字符,默认空格
center():居中对齐
一般形式:字符串名.center(width[fillchar])
l just():左对齐
一般形式:字符串名.l just(width[fillchar])
r just():右对齐
一般形式:字符串名.r just(width[fillchar])
zfill():返回指定宽度的字符串,原字符串右对齐,左侧填充0
一般形式:字符串名.zfill(width)
>>> '你好,世界!'.center (20) #居中对齐
' 你好,世界! '
>>> '你好,世界!'.center (20,'=') #居中对齐,以=填充
'=======你好,世界!======='
>>> '你好,世界!'.ljust (20,'=') #左对齐
'你好,世界!=============='
>>> '你好,世界!'.rjust (20,'=') #右对齐
'==============你好,世界!'
>>> '你好,世界!'.zfill (20) #右对齐,左侧以0填充
'00000000000000你好,世界!'
字符串支持的运算符
连接运算符"+",表示两个字符串连接,生成新字符串。
与整数的重复运算符"*",表示表示序列重复,得到新的字符串
成员判断关键字"in","not in",寻找的指定字符按整体处理
适用于字符串对象的内置函数
len()函数:计算字符串长度
count()函数:统计字串的个数
list(zip(列表名,列表名))
>>>str1 = "Hello World!"
>>> list(zip(str1,str1))
[('H', 'H'), ('e', 'e'), ('l', 'l'), ('l', 'l'), ('o', 'o'), (' ', ' '), ('W', 'W'), ('o', 'o'), ('r', 'r'), ('l', 'l'), ('d', 'd'), ('!', '!')]
sorted()
>>>str1 = "Hello World!"
>>> sorted(str1)
[' ', '!', 'H', 'W', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r']
list(reversed(列表名))
>>>str1 = "Hello World!"
>>> list(reversed(str1))
['!', 'd', 'l', 'r', 'o', 'W', ' ', 'o', 'l', 'l', 'e', 'H']
lisrt(enumerate(列表名))
>>>str1 = "Hello World!"
>>> list(enumerate(str1))
[(0, 'H'), (1, 'e'), (2, 'l'), (3, 'l'), (4, 'o'), (5, ' '), (6, 'W'), (7, 'o'), (8, 'r'), (9, 'l'), (10, 'd'), (11, '!')]
list(map())
max()
min()
内置函数eval()用来把任意字符串转化成python表达式并进行求值
>>> eval('3+4')
7
>>> a = 3
>>> b = 4
>>> eval('a+b') #这时候要求变量a,b已存在
7
>>> import math
>>> eval('math.sqrt(3)')
1.7320508075688772