美文网首页程序员
python内置数据类型之字符串

python内置数据类型之字符串

作者: 我只是我笔下的小丑 | 来源:发表于2018-12-14 18:07 被阅读2次

    1. 什么是字符串?

    1. 字符串是一个个字符组成的有序的序列,是字符的集合;
    2. 字符串用单引号、双引号或三引号括起来,同时使用反斜杠来转义特殊字符。;
    3. 字符是不可变的对象;
    4. 空格也是字符。

    2. 字符串的定义

    l = 'hello,mykernel'
    print(l)
    
    hello,mykernel
    

    说明:

    • 一对单引号和一对双引号效果完全一样;
    • 三对单引号和三对双引号效果完全一样;
    • 三对引号可以定义多行字符串,且不需要转义符转义特殊字符。

    3. 字符串的相关操作

    1. 字符串的分隔

    1. split()操作
    print('l love python'.split())
    # split()的()中指定分隔符
    # 默认使用空格作为分隔符
    
    # maxsplit=# 可以指定分隔的次数。
    print('my name is  mykernel'.split('m',maxsplit=1))
    
    #分隔符可以是任意字符串。
    
    ['l', 'love', 'python']
    ['', 'y name is  mykernel']
    
    2. rsplit()

    从右往左分隔。

    print('my name is  mykernel'.rsplit('m',maxsplit=1))
    
    #当不用maxsplit= 时候,split和rsplit效果一样,但是split效率更高。
    
    ['my name is  ', 'ykernel']
    
    3. splitlines

    按行进行分隔,返回分隔的结果,不带换行符。

    l = """l love python
    i am mykernel
    """
    l.splitlines()
    
    ['l love python', 'i am mykernel']
    
    4. partition

    partition()总是返回一个三元组,它按传入的分割符分割一次。打印分割符的前半部分,分隔符本身和后半部分。

    l = """l love python"""
    l.partition(' ')
    
    #partition() 不能不传入分隔符,只分隔一次,打印内容,为前半部分、分隔符和后半部分.
    
    ('l', ' ', 'love python')
    

    2. 字符的大小写转换

    1. upper()

    小写转大写,upper()方法。

    l = """l love python"""
    l2= l.upper()
    print(l2)
    
    L LOVE PYTHON
    
    2. lower()

    大写转小写,lower()方法。

    l2.lower()
    
    'l love python'
    
    3. title()和capitalize()

    首字母转大写,title()和capitalize()方法

    l = 'l love python'
    str2 = l.title()
    print(l.title())  #做文章的标题,每个字母的首字母大写
    print(l.capitalize()) #做正文段落的开始,第一个首字母大写
    
    L Love Python
    L love python
    
    4. casefold()

    忽略大小写,casefold()方法

    print(str2)
    print(str2.casefold())
    
    L Love Python
    l love python
    

    3. 字符串的修改

    1. replace()

    replace() 字符串的替换,只能从左到右的替换。

    str = 'i love python'
    str.replace('love python','am mykernel')  #前边是旧的字符串,后边是新的字符串。
    
    'i am mykernel'
    

    可以加上第三参数,控制修改的个数。

    str = 'i very very very love python '
    str.replace('very','非常',2)  #替换2个
    
    'i 非常 非常 very love python '
    
    2. strip()

    strip()方法,移除前后的空白(\n,\t,\r)

    str = '   mykernel   love  python   \n'
    print(str)
    str2 = str.strip()
    print(str2)
    
       mykernel   love  python   
    
    mykernel   love  python
    

    去掉两端可以匹配到的字符

    s = '<str>>'
    s.strip('<r>')
    
    'st'
    
    1. lstrip()只移除左侧部分;
    2. rstrip()只移除右侧部分。
    3. ljust()、just()和center()

    填充字符串。

    1. ljust() 右侧填充
    2. rjust() 左侧填充
    3. center()两侧填充
    print('mykernel'.ljust(30))
    print('mykernel'.rjust(30))
    print('mykernel'.center(30))  #一边15个。。。。
    
    mykernel                      
                          mykernel
               mykernel           
    

    可以指定填充字符,但是不能指定多个字符。

    print('mykernel'.ljust(30,'+'))
    print('mykernel'.rjust(30,'#'))
    print('mykernel'.center(30,'*'))  #一边15个。。。。
    
    mykernel++++++++++++++++++++++
    ######################mykernel
    ***********mykernel***********
    

    说明:需要填充的长度=指定的长度-原字符串长度,如果原字符串为8,用center()指定的长度为9,则只填充左侧。如果指定的宽度小于等于原厂不做任何操作。

    4.字符串的查找

    1.find()

    find(sub[, start[, end]])
    在指定的区间,从左到右查找,找到返回对应的索引值,没找到返回-1.

    rfind(sub[, start[, end]])
    在指定的区间,从右到左查找,找到返回对应的索引值,没找到返回-1.

    str = 'i very very very love python '
    print(str.find('very'))
    print(str.find('very',5))
    print(str.rfind('very',4))
    print(str.rfind('very',-20,-1))
    
    2
    7
    12
    12
    
    2. index()

    index(sub[, start[, end]])
    在指定的区间,从左到右。找到返回对应的索引值,没找到返回ValueError。

    rindex(sub[, start[, end]])
    在指定的区间,从右到左。找到返回对应的索引值,没找到返回ValueError。

    3. count()

    count(sub[, start[, end]])
    在指定的区间,从左到右,统计子字符串sub出现的次数

    str = 'i very very very love python '
    print(str.count('very'))
    print(str.count('very',5))
    print(str.count('very',5,11))
    
    3
    2
    1
    
    len(str)  
    ##len()统计字符串的长度。个数即长度。
    
    29
    

    说明:
    index()和count()方法的时间复杂的为O(n)

    5. 字符串的判断

    1. startwith()

    startwith(value,[start,[stop]])
    判断字符是不是以某个为单词开始的,返回true或者false。

    str = 'i am mykernel,i very very very love python'
    print(str.startswith('am'))
    print(str.startswith('i'))
    
    ## 也可以指定范围进行匹配。
    print(str.startswith('am',2,20)) #(2,20]
    
    
    False
    True
    True
    
    2. endswith()

    同startwith
    endswith(value,[start,[stop]])
    判断字符是不是以某个为单词结束的,返回true或者false。

    str = 'i am mykernel,i very very very love python'
    print(str.endswith('am'))
    print(str.endswith('python'))
    
    False
    True
    

    6. 字符串拼接

    1. +
    'i'+' love'+' python'
    
    'i love python'
    
    2. join()
    ' '.join(['i'+' love'+' python'])
    
    'i love python'
    

    7. 字符串的格式化

    字符串格式化是字符串拼接的一种手段。但是很重要,所以单独列出来。

    1. printf style字符串格式化
    s = 'i love %s' #%s为格式占位符,然后再其他地方可以将参数传入并替换该占位符。
    s%('python',) #将python传入,替换占位符。
    
    'i love python'
    

    说明:一个占位符需要传入一个参数,当传入的参数和占位符个数不匹配的时候会报错。当传入的类型不匹配时会出现“TpyeError”错误。

    当占位符是s%时候,隐式的调用了str(),其传入的可以为任意类型;

    当占位符是r%时候,隐式的调用了repr()方法。

    常见的占位符:

    1. s,获取传入对象的str方法的返回值,并将其格式化到指定位置
    2. r,获取传入对象的repr方法的返回值,并将其格式化到指定位置
    3. 整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
    4. o,将整数转换成 八 进制表示,并将其格式化到指定位置
    5. x,将整数转换成十六进制表示,并将其格式化到指定位置
    6. d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
    7. e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
    8. E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
    9. f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
    10. F,同上
    11. g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
    12. G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
    13. %,当字符串中存在格式化标志时,需要用 %%表示一个百分号
    2. format字符串格式化

    a. format方法可以使用花括号作为占位符,传入的参数将替换花括号。

    s = 'i love {}' #{}作为占位符
    s.format('python')
    
    'i love python'
    

    b. format方法的参数可以为多个,如果不在括号里指定其位置一一对应引入。

    s ='i love {}, i am {}'
    s.format('python','mykernel')  #按照位置传入
    
    'i love python, i am mykernel'
    

    c. format方法可以在花括号里填入位置数字,其后的参数按照位置引入,从0号位置开始

    s ='i love {1}, i am {0}'
    s.format('python','mykernel') 
    
    'i love mykernel, i am python'
    

    同一个位置的参数可以引入多次。

    s ='i love {0}, i am {0}'
    s.format('python','mykernel') 
    
    'i love python, i am python'
    

    d. format方法可以用字符作为占位符的标志,方便识别。

    'i love {language},i am {name}'.format(language='python',name='mykernel')
    
    
    'i love python,i am mykernel'
    

    e. format方法的占位符可以混用,但是位置参数必须放在最前。

    'my name is {0},i love {language},i am {age}'.format('mykernel',language='pyrhon',age=18)
    
    'my name is mykernel,i love pyrhon,i am 18'
    

    说明1:

    1. 占位符的个数大于参数个数的时候,会抛出异常IndexError。
    2. 占位符的个数小于参数个数的时候,若对应的占位符能匹配到值则不报错,匹配不到值会返回异常。
    3. 当占位符出现混用的情况时,位置参数不在最前会返回异常。

    说明2:

    1. 通常使用2.6或之后的版本使用format方法,2.6之前使用printf style。
    2. 在format中,需要注意的是,在2.6版本中是不能省略大括号里面的数字或者关键字。

    更多欢迎访问:http://www.mykernel.cn/

    相关文章

      网友评论

        本文标题:python内置数据类型之字符串

        本文链接:https://www.haomeiwen.com/subject/bszghqtx.html