python中的字符串是一个不可变对象,其是字符的线性排列,采用一体式顺序表(参后续数据结构与算法)的形式来实现,在底层应该看成一个序列/一种组合对象而不是单个对象,其很多操作都不是常量时间的,是线性时间操作。
一、字符串的基本操作
字符串是python中最常见的对象(是的,字符串也是对象,python中的任何东西都是对象),是不可变对象(重复),即在python中,字符串一旦创建就不可再更改,新字符串的产生是需要重新开辟内存生成对象的。
字符串的表示方法:python中使用单引号或双引号或三引号来表示字符串,其中:①不区分单引号与双引号,即’abc’与"abc"是等价的;
②在某些特定格式的字符串(如json)中,必须使用双引号表字符串,其与模块要求的格式有关;
③要注意,如果想在字符串中再添加引号,则必须区分,如'a+"b"+c'"a+'b'+c"
两者等价,但其使用的引号必须有区别;
④三引号可以将输入的换行、缩进等特殊字符自动转换,再次输出时保持输入的格式,例如:''' a'''
存储为'\ta'
(’\t’为制表符,即缩进),再次输出时会自动转换,尤其适用于转换HTML文档、SQL语句时;
⑤在字符串前添加r,表示原生字符串,即不将字符串中的特殊符号进行转义,如r'\t'
,其输出为'\\t'
,其中\为转义字符。
注:字符串的内容其实是固定的,如'\t'
其也只是在直接print时才会输出为缩进,因此对于应用而言,Ⅰ三引号字符串保留原本格式,用于函数/类注释、文档字符串等;Ⅱ原生字符串用于字符串的正则匹配,因为其中多处应用到了\,如若不加区分可能会被解释器错误理解;Ⅲ其它场景使用普通字符串即可。
字符串的长度:len(str)
可以返回字符串的字符长度,默认情况下不区分中英文字符统一按一个字符处理;
str.encode('utf-8')
将字符串编码为bytes,此时len()统计其字节数,GBK中中文占两个字节,UTF-8中中文占3个字节。
字符串的切片、分割与合并:
①切片操作与列表类似,使用中括号记法(str[a:b:c]
切片,a[index]
下标访问);
②分割:str.split(a,b)
,其中a用于指定分隔符(默认为None,即所有空字符,换行符制表符空格等),b用于指定分割的次数(即检索b个空字符,生成b+1个字符串),返回一个由分割后的字符串组成的列表(若不指定分隔符,则多个在一起的空白符会算作一个分隔符,若指定分隔符,则会产生空元素,例如对s = ' a b c'
进行分割,s.split()
返回['a', 'b', 'c']
,而s.split(' ')
返回['', 'a', '', 'b', '', '', 'c']
);
str.rsplit()
与split类似,但从右向左进行检索;
str.splitlines()
用换行符分割;
str.partition(a)
在str中检索字符串a,返回一个元组,由a前的子串,a,a后的子串组成,若检索到多个a,则以第一个为准,若检索不到a,则返回(str, '', '')
;
str.rpartition(a)
与partition类似,从右向左检索;
③str.join(a)
其中a是可迭代对象,