• 基本数据类型之字符串


    一、定义:由一对单引号或双引号包含的一串字符。字符串是不可变类型,字符串之间可以进行加法、乘法的运算,运算的本质就是字符串拼接。

    复制代码
    name="marsha"  
    age="49"
    print(name+age)
    print(name*3)
    
    marsha49
    namenamename
    复制代码

    二、数据类型转换:str() 可以将任意数据类型转换成字符串类型。

    复制代码
    #list>str
    a=[1,2,3]              #list
    a=sir([1,2,3])         #str
    
    #dict>str
    a=str({"name":"marsha","age"=49})     #str
    
    #int>str
    x=str(57)      #str
    
    #float>str
    y=str(3.1415)
    
    #tuple>str
    m=str((1,2,3))
    
    #set>str
    L=str({1,2,3})
    复制代码

    三、内置方法

    A、取值:字符串可以按索引取值,可以取全值,可以部分取值;注意:取值不算空格;且,只能取,不能改 ;正向取从0开始数,反向取从-1开始数。

         语法格式: [ ]

    复制代码
    msg="hello world"
    print(msg)            #取全值
    print(msg[5])         #正向取
    print(msg[-3])       #反向取
    
    hello world
    w
    r
    复制代码

    B、切片Slice:是一个取操作,不改变原值,属于浅拷贝,即:从一个大字符串中拷贝出一个字符串,正切从0开始数位,空格要算位,切片顾头不顾尾。  完整切片语法格式:object[start_index:end_index:step]。

    step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。

    start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

    end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。

        总结:

    • 开头:当步长>0时,不写默认0。当步长<0时,不写默认-1

    • 结束:当步长>0时,不写默认列表长度加一。当步长<0时,不写默认负的列表长度减一

    • 步长:默认1,>0 是从左往右走,<0是从右往左走

    (一)start_index、end_index、step三者可同为正、同为负,或正负混合。但必须遵循一个原则,即:当start_index表示的实际位置在end_index的左边时,从左往右取值,此时step必须是正数(同样表示从左往右);当start_index表示的实际位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须相同。

    (二)当start_index或end_index省略时,取值的起始索引和终止索引由step的正负来决定,这种情况不会有取值方向矛盾,但正和负取到的结果顺序是相反的,因为一个向左一个向右。

    (三)step的正负是必须要考虑的,尤其是当step省略时。比如msg[-1:],很容易就误认为是从“终点”开始一直取到“起点”,原因在于step省略时step=1表示从左往右取值,而起始索引start_index=-1本身就是对象的最右边元素了,再往右已经没数据了,因此结果只含有d一个元素。

    (四)切片的返回结果类型和切片对象类型一致,返回的是切片对象的子序列。如:对一个列表切片返回一个列表;字符串切片返回字符串。

    切片可以全切,正切,反切,还可以加步长切片。全切用[:],[: :]操作,反向全切用[::-1]操作。

    复制代码
    msg="hell0 world"
    print(msg[:])     #正向全切
    print(msg[::-1])   #反向全切
    print(msg[0:8])    #正向切,从第一位切到第7位,即0,1,2,3,4,5,6,7
    print(msg[0:8:2])   #正向切,步长为2,从第一位开始,两位两位的数,即0,2,4,6,注意,8不能数了,顾头不顾尾
    print(msg[5:0:-1])   #反向切,步长位1,起点为5,终点为0,即5,4,3,2,1,0
    
    #输出结果
    hello world
    dlrow olleh
    hello wo
    hlow
     olleh
    复制代码

    C、长度len:获取字符串的长度,即字符串的个数,起始位置为1。但凡存在于引号内的都算作字符,含空格

    msg="hello world!"
    print(len(msg))
    >>>12

    D、成员运算in  和not in:返回布尔值True 或False

    复制代码
    msg="hello world"
    print(‘hello’ in msg)
    print(“hello” not in msg)
    >>>
    True
    False
    复制代码

    E、移除字符串首尾的空白字符:strip( ) #空白字符如:空格,\ n   ,\ t;

         移除首尾指定字符: strip (指定字符),如strip(*&$@)

          移除左边的字符:lstrip( )

         移除右边的字符:rstrip( )

    1
    2
    3
    4
    5
    6
    7
    msg=“   hello world \n    ”
    res="**&hello world%"
    print(msg.strip())
    print(res.strip(*$%))
    print(res.lstrip(*&))
    >>>
    hello world
    hello world
    hello world
    %

     F、切分:把一个字符串按照某种分隔符号进行切割,得到一个新的列表.

    split():从左到右切分,默认以空格作为切分符号;

    split('指定符号'):从左到右,按照指定的字符切割字符串;切分可以指定次数,如split(' : ' , 1)

    rsplit():从右到左的顺序对字符串进行切分;

    rsplit( '指定符号’ ):从右到左切分,按照指定的字符切割字符串。

    复制代码
    info="my name is marsha"
    msg="marsha:49:max"
    print(info.split())
    print(msg.split(':',1))
    >>>
    ['my'', 'name', 'is','marsha']
    ['marsha','49:max']
    复制代码

    G、用 for in 循环取出字符中的每一个字符,含符号和空格

    复制代码
    info='marsha:49'
    for x  in  info
    print(x)
    >>>
    m
    a
    r
    s
    h
    a
    :
    4
    9
    复制代码

    H、字符串改写:lower( )全改小写;upper( )全改大写

    复制代码
    msg='MaRsHa'
    print(msg.lower())
    print(msg.upper())
    >>>
    marsha
    MARSHA
    复制代码

    I、判断字符串是否以括号内指定的字符开头:startswith(' '),结果返回布尔值;

        判断字符串是否以括号内指定的字符结尾:endswith (' ')   结果返回布尔值。

    复制代码
    msg='my name is marsha'
    print(msg.startswith('m'))
    print(msg.engswith('i'))
    >>>
    True
    False
    复制代码

    J、格式化输出:format

        a:按照位置一一对应传值:%s可以接收任意值,   %d可以接收传的数字

    info='my name in %s  my age is  %d'  %('marsha','49')
    print(info)
    >>>
    'my name is marsha my age is 49'

      b:按照位置,用空的{}一一对应传值:{}.format(按中括号个数传值

    info='my name is {} my age is {}'.format('marsha',49print(info)
    >>>
    'my name is marsha my age is 49'

       c:不依赖位置传值:{变量名}  .format(变量赋值)

    info='my name is {name}{name} my age is {age}'.format(age=49,name='marsha'print(info)
    >>>
    'my name is marsha marsha my age is 49'

    d:把format传入的多个值当作一个列表,然后按照 {索引}取值

    info='my name is {1} my age is {0}'.format('marsha',49print(info)
    >>>
    'my name is 49 my age is marsha'

    K、' 指定分隔符  ’ . join(  ):是从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串。它的使用与split( )相反

    res='hello'
    print('%'.join(res)
    >>>
    'h%e%l%l%o'

    L、变量名.replace( ) :修改字符串中旧的字符,可以指定修改个数.

    复制代码
    msg='my name is marsha,my age is 49'
    print(msg.replace('49','20'))
    print(msg.replace('my','your',1))
    >>>
    'my name is marsha, my age is 20'
    'your name is marsha,my age is 49'
    复制代码

    M、判断字符串是否为纯数字组成用 isdigit()返回布尔值

    msg='ab3456'
    print(msg.isdigit( ))
    >>>
    False

    N、字符串需要了解的其他操作

       a:  find)rfind():从指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则返回-1

       b:  index()rindex():同find,但在找不到时会报错

       c:  count():统计字符串在大字符串中出现的次数

       d:  center() 返回一个原字符串居中显示,并使用指定符号fillchar填充至长度 width 的新字符串。默认填充字符为空格。

            ljust( )返回一个原字符串左对齐显示,并使用指定符号fillchar填充至长度 width 的新字符串。默认填充字符为空格。

            rjust( )返回一个原字符串右对齐显示,并使用指定符号fillchar填充至长度 width 的新字符串。默认填充字符为空格。

            zfill( )返回一个原字符串右对齐显示,并使用0填充至长度 width 的新字符串。

       e:   zxpandtabs()返回字符串中的 tab 符号('\t')转为空格后生成的新字符串。

       f:    captalize():首字母大写

             swapcase():大小写翻转

            title():每个单词的首字母大写

       j:    is数字系列(详情见以下代码)

    复制代码
    msg='tony say hello'
    msg.find('o',1,3)  # 在索引为1和2(顾头不顾尾)的字符中查找字符o的索引
    1  
    
    msg.index('e',2,4) # 报错
    ValueError
    
    
    msg = "hello everyone"
    msg.count('e')  # 统计字符串e出现的次数
    4
    
    msg.count('e',1,6)  # 字符串e在索引1~5范围内出现的次数
    1
    
    
    name='tony'
    name.center(30,'-')  # 总宽度为30,字符串居中显示,不够用-填充
    -------------tony-------------
    
    name.ljust(30,'*')  # 总宽度为30,字符串左对齐显示,不够用*填充
    tony**************************
    
    name.rjust(30,'*')  # 总宽度为30,字符串右对齐显示,不够用*填充
    **************************tony
    
    name.zfill(50)  # 总宽度为50,字符串右对齐显示,不够用0填充
    0000000000000000000000000000000000000000000000tony
    
    
    name = 'tony\thello'  # \t表示制表符(tab键)
    print(name)
    tony    hello
    
    name.expandtabs(1)  # 修改\t制表符代表的空格数
    tony hello
    
    message = 'hello everyone nice to meet you!'
    message.capitalize()
    Hello everyone nice to meet you!  
    
    message1 = 'Hi girl, I want make friends with you!'
    message1.swapcase()  
    hI GIRL, i WANT MAKE FRIENDS WITH YOU!  
    
    msg = 'dear my friend i miss you very much'
    msg.title()
    Dear My Friend I Miss You Very Much 
    
    #is数字系列
    #在python3中
    num1 = b'4' #bytes
    num2 = u'4' #unicode,python3中无需加u就是unicode
    num3 = '' #中文数字
    num4 = '' #罗马数字
    
    #isdigt:bytes,unicode
    >>> num1.isdigit()
    True
    >>> num2.isdigit()
    True
    >>> num3.isdigit()
    False
    >>> num4.isdigit() 
    False
    
    #isdecimal:uncicode(bytes类型无isdecimal方法)
    >>> num2.isdecimal() 
    True
    >>> num3.isdecimal() 
    False
    >>> num4.isdecimal() 
    False
    
    #isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
    >>> num2.isnumeric() 
    True
    >>> num3.isnumeric() 
    True
    >>> num4.isnumeric() 
    True
    
    # 三者不能判断浮点数
    >>> num5 = '4.3'
    >>> num5.isdigit()
    False
    >>> num5.isdecimal()
    False
    >>> num5.isnumeric()
    False
    
    '''
    总结:
        最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
        如果要判断中文数字或罗马数字,则需要用到isnumeric。
    '''
    
    # is其他
    >>> name = 'tony123'
    >>> name.isalnum() #字符串中既可以包含数字也可以包含字母
    True
    >>> name.isalpha() #字符串中只包含字母
    False
    >>> name.isidentifier()
    True
    >>> name.islower()  # 字符串是否是纯小写
    True
    >>> name.isupper()  # 字符串是否是纯大写
    False
    >>> name.isspace()  # 字符串是否全是空格
    False
    >>> name.istitle()  # 字符串中的单词首字母是否都是大写
    False
    复制代码

     

  • 相关阅读:
    TS 的 高级用法 与 知识点总结
    LeetCode 双周赛 103(2023/04/29)区间求和的树状数组经典应用
    【Java】文件操作(一)
    【接口测试】微信小程序接口自动化的实现方案
    流沙画模拟器源码
    【Hadoop】 软件
    element分页
    react 修改less文件后保存,内存溢出,项目崩溃问题解决
    js对象扁平化:Javascript对象进行扁平化处理
    学习路之工具--SecureCRT的下载、安装
  • 原文地址:https://www.cnblogs.com/marsha/p/16010631.html