这周来整理一下字符串的相关知识
-
序列型数据
分为四种:字符串str" “、元组tuple()、列表list[ ]、字节数据bytes b” "
基本操作: 序列的长度len()、最大值max()、最小值min()、求和sum()
-
序列的索引访问操作
s[i]…………#访问系列s在索引i处的元素
-
序列的切片操作(截取序列的一部分)
s[i:j] 或 s[i:j:k]
注:1. i 为序列开始下标,包含s[i].若省略,则从0开始
2. j 为序列结束下标,不包含s[j].若省略,则直到序列结束为止
3. k 为步长,若省略,则步长为1
4. 下标可以是负数,如果截取范围内没有数据,则返回空序列;如果超过下标范围,不报错
-
序列的连接、重复、成员关系操作
x+y
连接两个序列x和y
n * x 或 x * n
复制n次序列x
x in s
如果x是s的字串,返回True,否则返回False
序列的成员关系操作
x in s
……………………如果为True,则表示存在
x not in s
………………如果为True,则表示不存在
s.count(x)
………………返回x在s(指定范围[start,end)中出现的次数)
s.index(x[,i[,j]])
…… 返回x在s(指定范围[i,j)中第一次出现的下标
- 序列的比较运算操作
-
序列的排序操作
格式:sorted(s,key=None,reverse=False)
-
序列拆封(赋值问题)
1.变量个数和序列长度相等时:
变量1,变量2,……,变量n=系列或可迭代对象
2.变量个数和序列长度不等,使用 *变量 ,将多个值作为整体赋给新变量
3.使用临时变量
参考文章点击此处
字符串方法
字符串的类型判断
str.isdigit()
是否全为数字
str.isdecimal()
是否只包含十进制数字字符
str.isnumeric()
是否只包含数字字符
对于非Unicode字符串,上述三个方法是等价的
str.isalpha()
是否全为字母
str.isalnum()
是否全为字母或数字
str.islower()
是否全部为小写
str.isupper()
是否全部为大写
str.istitle()
是否为标题,即个单词首字母大写
注意:istitle() 判断时会对每个单词的首字母边界判断
str.isspace()
判断字符串是否是空白(空格、制表符、换行符等)字符,没有任何字符是不算是空白
str.isidentifier()
是否满足标识符定义规则
str.isprintable()
是否是可打印字符(例如制表符、换行符就不是可打印字符,但空格是)
判断是否满足标识符定义规则 标识符定义规则为:只能是字母或下划线开头,不能包含除数字、字母和下划线以外的任何字
大小写转换
字符串的填充与对齐
str.center(wideth[, fillchar])
将字符串居中,左右两边使用 fillchar 进行填充,使得整个字符串的长度为 width
str.ljust(wideth[, fillchar])
左对齐
str.rjust(wideth[, fillchar])
右对齐
ljust() 使用 fillchar 填充在字符串S的右边,使得整体长度为width。rjust() 则是填充在左边。如果不指定fillchar,则默认使用空格填充。如果width小于或等于字符串S的长度,则无法填充,直接返回字符串S(不会创建新字符串对象)
str.zfill(width)
用 0 填充在字符串S的左边使其长度为width。如果S前有正负号+/-,则 0 填充在这两个符号的后面,且符号也算入长度。如果width小于或等于S的长度,则无法填充,直接返回S本身(不会创建新字符串对象)
str.expandtabs([tabsize])
将字符串中的制表符扩展为若干个空格,tabsize默认为8
字符串的的修剪
str.strip([chars])
str.lstrip([chars])
str.rstrip([chars])
分别是移除左右两边、左边、右边的字符chars。
如果不指定chars或者指定为None,则默认移除空白(空格、制表符、换行符)
唯一需要注意的是,chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除
字符串的测试与查找:
str.startswith(prefix[, start[, end]])
str.endswith(suffix[, start[, end]])
endswith() 检查字符串str是否以suffix结尾,返回布尔值的True和False。suffix可以是一个元组。可以指定起始start和结尾end的搜索边界
同理startswith() 用来判断字符串str是否是以prefix开头
str.count(sub[, start[, end]])
返回字符串str中字串sub出现的次数,可以指定从哪里开始计算(start)以及计算到哪里结束(end),索引从0开始计算,不包括end边界
str.find(sub[, start[, end]])
在str.rfind(sub[, start[, end]])
str.index(sub[, start[, end]])
str.rindex(sub[, start[, end]])
find()搜索字符串S中是否包含字串sub,如果包含,则返回sub的索引位置,否则返回“-1”。可以指定其实start和结束end的搜索位置
index() 和 find() 一样,唯一不同点在于当找不到字串时,抛出ValueError错误
rfind()则是返回搜索到的最右边字串的位置,如果只搜索到一个或没有搜索到字串,则和find() 是等价的
同理rindex()
字符串的替换:
S.replace(old, new[, count])
将字符串中的字串old替换为new字符串,如果给定count,则表示只替换前count个old字串。如果S中搜索不到字串old,则无法替换,直接返回字符串S(不创建新字符串对象)
S.expandtabs(N)
将字符串S中的 \t 替换为一定数量的空格。默认为N=8.注意,expandtabs(8)不是 \t 直接替换为8个空格。例如‘xyz\ttab’.expandtabs() 会将 \t 替换为5个空格,因为“xyz”占用了3个字符位。所以,在替换“\t”为空格时,会减掉“\t”前面的字符数量。如果“\t”的前面正好没有字符,则直接将“\t”替换为N个空格。另外,它不会替换换行符(\n 或 \r)
S.translate(table)
static str.maketrans(x[, y[, z]])
str.maketrans()生成一个字符一一映射的table,然后使用translate(table)对字符串S中的每个字符进行映射
translate()实现的功能和Linux中的tr命令是类似的
注意,maketrans(x[,y[,z]])中的x和y都是字符串,且长度必须相等
如果maketrans(x[,y[,z]])给定了第三个参数z,则这个参数字符串中的每个字符都会被映射为None
字符串的拆分与组合:
S.split(sep=None, maxsplit=-1)
S.rsplit(sep=None, maxsplit=-1)
S.splitlines([keepends=True])
都是用来分割字符串,并生成一个列表
split() 根据sep对S进行分割,maxsplit用于指定分割次数,如果不指定maxsplit或者给定值为“-1”,则会从左向右搜索并且每遇到sep一次就分割知道搜索完字符串。如果不指定sep或者指定为None,则改变分割算法:以空格为分割符,且将连续的空白压缩为一个空格
rsplit()和split()是一样的,只不过是从右边向左边搜索
splitlines()专门用来分割换行符。虽然它有点像split(’\n’)或split(’\r\n’),但它们有些区别
splitlines()中可以指定各种换行符,常见的是\n、\r、\r\n。如果指定keepends为True,则保留所有换行符
>>>'1,2,3'.split(',') #sep为单个字符时
['1', '2', '3']
>>>'1,2,3'.split(',' ,1) #只分割了一次
['1', '2,3']
>>>'1,2,,3'.split(',') #不会压缩连续的分隔符
['1','2','','3']
>>>'<hello><><world>'.split('<')
['','hello>','>','world>']
>>>'<hello><><world>'.split('<>')
['<hello>','<world>']
S.partition(sep)
S.rpartition(sep)
搜索字符串S中的字串sep,并从sep处对S进行分割,最后返回一个包含3元素的元组;sep左边的部分是元组的第一个元素,sep自身是元组的第二个元素,sep右边是元组的第三个元素
partition(sep)从左边第一个sep进行分割,rpartition(sep)从右边第一个sep进行分割
如果搜索不到sep,则返回的3元素元组中,有两个元素为空。partition()是后两个元素为空,rpartition()是前两个元素为空
S.join(iterable)
将可迭代对象(iterable)中的元素使用S连接起来。注意,iterable中必须全部是字符串类型,否则报错
可以参考学习一下这篇博文中的内容
Python字符串操作