首页 > Python之路 > python数据结构字符串

python数据结构字符串

字符串
    使用一个个字符组成的有序序列,是字符的集合
    使用单引号,双引号,三引号引住的祖父序列
    字符串是不可变对象
    python3起,字符串就是unicode类型
    有序可迭代
字符串连接
+ ->str   返回一个新的字符串
q+b
join连接,可以自定义连接符
string.join(iterable)-->str返回一个新的字符串
lst=['1','2','3']
print('/'.join(lst))   以/分割
打印结果‘1/2/3’

字符串分割
split系
        将字符串按照分隔符分割成若干字符串,并返回列表
partition系
        将字符串按照分隔符分割成2段,返回这2段和分隔符的元组
split系:从左自右,将字符串按照分隔符分割成若干字符串,并返回列表
    
    split(sep=None,maxsplit=-1)--->list of string,返回新的字符串列表
    sep字符分隔符,缺省的情况下空白字符做完分隔符
    maxsplit指定分割的次数,-1表示比那里整个字符串
    列如:
    s1="i,m \ta super studengt."
    s1.split()  #使用默认的
    打印结果:['i,m', 'a', 'super', 'studengt.']

rsplit:从右自左遍历,将字符串按照分隔符分割成若干字符串,并返回列表
    split(sep=None,maxsplit=-1)--->list of string,返回新的字符串列表
    从右自左遍历,但是返回的列表顺序还是正常的不会变换排序适合找路径的文件名
    切割后最后一个就是文件名
    sep字符分隔符,缺省的情况下空白字符做完分隔符
    maxsplit指定分割的次数,-1表示比那里整个字符串
    列如:
    s1="i,m \ta super studengt."
    s1.rsplit()  #使用默认的 
    打印结果:['i,m', 'a', 'super', 'studengt.']

splitlines: 按照行来切分字符串
    splitlines([keepends]) --> list of strings 返回新的字符串列表
    按照行来切分字符串
    keepends指的是是否保留行分隔符
    行分隔符包括\n  \r\n    \r等
    列如:
    'ab c\n\nde fg\rkl\r\n'.splitlines()
    'ab c\n\nde fg\rkl\r\n'.splitlines(True)
    s1 ='''I'm a super student'''
    print(s1)
    print(s1.splitlines())
    print(s1.splitlines(True))
  
partition系: 将字符串按照分隔符分割成2段,返回这2段和分隔符的元组

    partition(sep) --->(heade,sep,tail)
    从左至右,遇到分隔符就不字符串分割成两部分,返回头部、分隔符、尾部的分的三元组
    如果没有找到分割符,就返回头部(返回整个字符串)、2个空元素的三元组
    sep 分隔符,必须指定
    列如:
    s1 = '''I'm a super student'''
    s1.partition('s')
    s1.partition('stu')
    s1.partition('')
    s1.partition('abc')
    
    rpartition(sep) --->(heade,sep,tail)
    从右至左,遇到分隔符就不字符串分割成两部分,返回头部、分隔符、尾部的分的三元组
    如果没有找到分割符,就返回头部(返回整个字符串)、2个空元素的三元组
    sep 分隔符,必须指定

字符串大小写
字符串大小写:常用于统一大小写,大小写做判断用
    upper()    #全部大写
    lower()  #全部小写
    swapcase() #交互大小写(大小便小写,小写变大写)

字符串排版
title() -->str   #标题的每个单词都大写
    列如:
    s = 'as  sa   s'
    print(s.title())
    结果为: 'As Sa S'
        
capitalize()   --->str #首个单词大写
    列如:
    s = 'as  sa   s'
    print(s.capitalize())
    结果为: 'As sa s'
 
填充的字符数都是以0开始计算,左开又必区间[0,n)       
    center(width[,fillchar])  -->str #居中打印,
        width:打印宽度     fillchar 填充的字符串,不指定默认空格
        列如:
        s = 'a'
        print(s.center(5,'#'))
        结果为: '##a##'
        
    zfill(width) -->str    #width 打印宽度,居右打印,以0填充
        列如:
        s = 'a'
        print(s.zfill(5))
        结果为: '0000a'
    ljust(width[,fillchar])  --> str左对齐不指定字符串默认空格填充
        列如:
        s = 'a'
        print(s.ljust(5,'#'))
        结果为: 'a####'
    rjust(width[,fillchar])  --> str右对齐不指定字符串默认空格填充
        列如:
        s = 'a'
        print(s.rjust(5,'#'))
        结果为: '####a'

字符串修改
#字符串修改1,替换,返回新的字符串
replace(old,new[,count]) -->str   #字符串修改1,替换,返回新的字符串
    字符串中找到匹配的替换为新字符串,返回新字符串
    count表示替换几次,不指定就是全部替换
    列如:
    a = 'ppp.www.com'
    print(a.replace('p','a',2))
    结果为:aap.www.com
    
#字符串修改2,去处,返回新的字符串
strip([chars])  --> str
    从字符串两端去除知道的字符集chars中的所有字符
    默认不指定chars,则去除两端的空白字符
    列如:
    s = '\r\n\t hello python \n \t'
    print(s.strip())
    结果为:'hello python'
     s = 'hello python'
    print(s.strip('he'))
    结果为:'elo python'
lstrip([chars])  --> str   从字符串左端去除,用法同上
rstrip([chars])  --> str  从字符串右端去除,用法同上

字符串查找
字符串查找方法一,常用,方便判断
    find(sub[,start[,end)])  -->int
        在知道区间[start,end),从左至右,查找字符串sub。找到返回索引,没找到返回-1
    rfind(sub[,start[,end)])  -->int
        在知道区间[start,end),从右至左,查找字符串sub。找到返回索引,没找到返回-1
    列如:
    a = 'veryveryaaaa'
    print(a.find('aa',1,3))
    结果为返回索引:-1     #在指定区间找不到aa
    a = 'veryveryaaaa'
    print(a.find('aa',1,12))
    结果为返回索引:8        #找到aa
    rfind   用法一样,只是从右往左找
    
字符串查找方法二,不常用,可以用来调试
    index(sub[,start[,end)])  -->int
        在知道区间[start,end),从左至右,查找字符串sub。找到返回索引,没找到抛出VaueError异常程序终止
    rindex(sub[,start[,end)])  -->int
        在知道区间[start,end),从右至左,查找字符串sub。找到返回索引,没找到没找到抛出VaueError异常程序终止
    列如:
    a = 'veryveryaaaa'
    print(a.index('aa',1,3))
    结果:抛出VaueError异常程序终止     #在指定区间找不到aa
    a = 'veryveryaaaa'
    print(a.index('aa',1,12))
    结果为返回索引:8        #找到aa
    rindex   用法一样,只是从右往左找
    

统计字符出现次数
count(sub[,start[,end)])  -->int
    在知道区间[start,end],从左至右,统计字符串sub出现的次数,结果返回整型次数数字
    a = 'veryveryaaaa'
    print(a.count('aa',1,12))
    结果为:2
index与count方法的时间复杂度都是O(n),随着列表规模数据的加大而效率下降
len(string)   #返回字符串的长度,即字符串的个数

字符串判断
endswith(suffix[,start[,end]])   --> bool  判断是否已某个字符结尾结果返回bool类型
    在指定的区间[start,end),字符串是否是suffix结尾
    列如:
    a ='aaa ssss'
    print(a.endswith('aaa',0,10))
    结果为:False
       
startswith(suffix[,start[,end]])   --> bool  判断是否已某个字符开始结果返回bool类型
    在指定的区间[start,end),字符串是否是suffix开始
    列如:
    a ='aaa ssss'
    print(a.startswith('aaa',0,10))
    结果为:True

字符串判断is系列
isalnum()  --> bool 是否是字母和数字组成
isalpha()  --> 是否是字母
isdecimal()  --> 是否只包含十进制数字
isdigit()   --> 是否全部数字(0---9)
isidentifier()  是不是字母和下划线开头,其他都是字母、数字、下划线
islower()    是否全部小写
isupper()   是否全部大写
isspace()  是否只包含空白字符

字符串格式化
字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便
    join:拼接只能使用分隔符,且要求被拼接的是可迭代对象
    +   :拼接字符串方便,但是非字符串需要先转换为字符串才能拼接
    最常用的两种字符串格式化方式:
    1.C风格字符串格式化方式
        在2.5版本以前只能使用这种方式的格式化print输出
        格式要求:
        占位符:使用%和格式字符组成,列如 %s 、%d等
            s调用str()、r会调用repr(),所有对象都可以被这两个转换
        占位符中还可以插入修饰字符,列如%03d表示打印3个位置,不够前面补零
        format % values,格式字符串和被格式的值之间使用%分割
        values只能是一个对象,或者是一个合格式字符串占位符数目相等的元组,或是一个字典
        列如:
        print('I am %03d'%(20,))
        输出结果:'I am 020'
        print('I like %s' %'Python')
        输出结果:'I like Python'
        print('I am %-5d'%(20))
        输出结果:'I am  20'
        print('%3.2f%%,0x%x,0X%02X'%(89.7654,10,15))
        输出结果:'89.77%,0xa,0x0F'
    2.Python format()函数风格字符串格式化方式推荐使用该方式
        format函数格式字符串语法-------Python鼓励使用
            '{} {xxx}'.format(*args,**kwargs)  --> str
            args是位置参数,是一个元组
            kwargs是关键字参数,是一个字典
            花括号表示占位符
            {}表示安装顺序匹配位置参数,{n}表示去位置参数索引值为n的值
            {xxx}表示在关键字参数中搜索名称一致的
            {{}}表示打印花括号
            使用format格式化对齐
               print('{0}*{1}={2:<2}'.format(3,2,2*3))   #左对齐
               输出为:2*3=6
               print('{0}*{1}={2:<02}'.format(3,2,2*3))  #左对齐以0填充
               输出为:2*3=60
               print('{0}*{1}={2:>02}'.format(3,2,2*3)) #右对齐以0填充
               输出为:2*3=06
               print('{:^30}'.format('centered'))   #居中默认空格填充
               输出为:'     centered        '
               print('{:*^30}'.format('centered'))
                输出为:'************centered************'  #居中*号填充
            使用format格式进制转换
                print('int:{0:d},hex:{0:x},oct:{0:o},bin:{0:b}'.format(42))
                输出为:int:42,hex:2a,oct:52,bin:101010
                print('int:{0:d},hex:{0:#x},oct:{0:#o},bin:{0:#b}'.format(42))
                输出为:int:42,hex:0x2a,oct:0o52,bin:0b101010
                octets = [192,168,0,1]
                print('{:02x}.{:02x}.{:02x}.{:02x}'.format(*octets))   #转换为十六进制
                输出为:c0.a8.00.01


  •   正在提交中,请稍候...
      评论提交成功
    回复 的评论,点击取消回复。