跳转至

3. 字符串

字符串str

    作用
        用来记录文字信息
    表示方法
        在非注释当中凡是用引号括起来的部分都是字符串
         ' '      " "     """ """     '''  '''
    空字符串字面值的表示方式
        '' ""  """""" ''''''
        空字符串的布尔测试值bool(x)  False
    非空字符串字面值
        'Hello' "hello"  """hello""" '''hello'''
    单引号和双引号的区别
        单引号内的双引号不算结束符
        双引号内的单引号不算结束符
        示例
            print("I'm a student")

    三引号字符串
        ''' 或"""开头  , 以'''"""结尾的字符串
        作用
            三引号字符串中的换行符会自动转换为'\n'
            三引号可以包含单引号和双引号

隐式字符串字面值拼接

"I'am Student."     'I am "YangWenjun"'
# 得到的字符串等同于
'''I'am Student.I am "YangWenjun"'''

用转义序列代表特殊字符

    字符串字面值中用字符反斜杠\后跟一些字符代表特殊的一个字符
    字符表
        \'    代表一个单引号
        \"    代表一个双引号
        \n    代表一个换行符
        \\    代表一个反斜杠
        \r    返回光标至行首
        \t    水平制表符
        \f    换页
        \v    垂直制表符
        \b    倒退
        \0    字符串,字符值为0
        \0oo  oo为两位八进制表示的字符
        \xXX  XX为两位十六进制表示的字符
        \uXXXX  Unicode 16的十六进制的字符
        \UXXXXXXXX  Unicode 32的十六进制的字符

ASCII编码

# 查看ASCII编码表
$ man ascii #仅linux可用
常用的ASCII编码
        字符      十进制         十六进制
        '0'       48            0x30
        'A'       65            0x41
        'a'       97            0x61

序列的概念

字符串就是序列

# 求序列的长度函数
len(x)  返回字符串中的字符个数

raw 字符串(原始字符串)

    格式:
        r"字符串内容"
        r'字符串内容'
        r'''字符串内存'''
        r"""字符串内容"""
    作用:
        让转义字符无效
    示例
        a = 'C:\newfile\test.py'
        print(a)

        b = r'C:\newfile\test.py'
        print(b)
        print(len(a))
        print(len(b))

字符串的运算

    +   加号运算符用于拼接字符串
    +=  用于拼接运算后改变原变量的绑定关系
    示例
        x = 'abcd' + 'efg'
        print(x)    #abcdefg

        x += '123'
        print(x)    #abcdefg123



    *   乘号运算符生成重复的字符串
        x = "abcd"*3    #'abcdabcdabcd'
        y = 2 * '123'   #'123123'

        字符串只能和整数相乘
    *=  生成重复的字符串并改变原变量的绑定关系
        x = '123'
        x *= 2      #x = '123123'

        y = 3
        y *= 'ABC'     #y = 'ABCABCABC'

字符串的比较运算

    运算符
        < <= > >= == !=
    示例
        'A' < 'B'   #True
        'AB' <='AC' #True

in / not in 运算符

    作用
        in 用于序列,字典,集合中,用于判断某个值是否存在于容器中,
        如果存在返回True,否则返回False
    说明
        not in 返回结果和 in 相反
    格式
        对象 in 序列
    示例
        x = 'welcome to tarena!'
        'to' in x           #True
        'e t'  in x         #True
        'hello' in x        #False
        'hello' not in x    #True

字符串索引

    python 字符串是不可以改变的序列,所有的序列都可以通过索引来获取其中的数据元素

    语法
        字符串[整数表达式]
    说明
          序列的正向索引是从0 开始的,第二个索引为1,最后一个
        索引为len(s) - 1
          序列的反向索引是从-1 开始的,-1 代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)

切片操作 slice

    从字符串序列中取出相应的元素重新组成一个字符串序列
    语法
        字符串[(开始索引b):(介绍索引e):(步长s)]
        注:
            小括号()代表可省略
    说明
        1. 开始索引是切片切下的位置,0代表第一个元素,1代表第二个元素,
        -1代表最后一个元素...
        2. 结束索引是切片的终止索引(但不包含终止点)
        3. 步长是切片每次获取完当前元素后移动的方向和偏移量
    偏移量
        3.1 没有步长,相应于步长为1(默认为1)
        3.2 当步长为整数时,取正向切片,开始索引默认为0,结束索引为最后
            一个元素的下一个位置
        3.3 当步长为负数时,取反向切片,反向切片时,默认的起始位置为最后
            一个元素,终止位置是第一个元素的前一个位置
    示例
        s = 'ABCDE'
        # 字符串倒序
        a = s[::-1]
        print(a)

        # 字符串复制
        b = s[:]
        print(b)

python3 当中能用于字符串的函数

    len(s)      返回字符串的长度
    max(x)      返回字符串中编码值最大的字符
    min(x)      返回字符串中编码值最小的字符

    示例
        s = "Hello"
        len(s)   #  5
        max(s)   # 'o'
        min(s)   # 'H'

字符串的编码转换函数

    ord(c) 返回一个字符的Unicode值
    chr(i) 返回i这个值所对应的 字符

    示例
        print(ord('A'))     #65
        print(ord('中'))     #???
        print(chr('65'))    #A
        print(chr('2345'))  #???

整数转换为字符串函数

    bin(i) 将整数转换为二进制字符串     (binary)
    oct(i) 将整数转换为八进制字符串
    hex(i) 将整数转换为十六进制字符串

字符串的构造函数

str(obj="") 将对象转为字符串

帮助函数help(xxx)

>>> help(函数名)
>>> help(类型名)

python3中常用的字符串方法

    方法的调用语法
        对象.方法名(参数)
    示例
        "abc".isalpha()     #True判断'abc'是否是字母
        123.isalpha()       #报错

    S.isdigit() 判断字符串中的字符是否全为数字
    S.isalpha() 判断字符串是否全为英文字母
    S.islower() 判断字符串所有字符是否全为小写英文字母
    S.isupper() 判断字符串所有字符是否全为大写英文字母
    S.isspace() 判断字符串是否全为空白字符
    S.center(width[,fill]) 将原字符串居中,左右默认填充空格
        s.center(20)
        s.center(20,"#")
    S.count(sub[, start[,end]]) 获取一个字符串中子串的个数
        s = "ABCD ABC AB A"
        s.count('AB')
        s.count('AB',3)
        s.count('A',3,8)
    S.find(sub[, start[,end]]) 获取字符串中子串sub的索引,失败返回-1
        s .find('A')
        s .find('A',3)
        s .find('A',3,8)
    S.strip([chars]) 返回去掉左右char字符的字符串(默认char为空白字符)
        s.strip()  s.strip('@')
        s.lstrip()
        s.rstrip()
    S.lstrip([chars]) 返回去掉左侧char字符的字符串(默认char为空白字符)
    S.rstrip([chars]) 返回去掉右侧char字符的字符串(默认char为空白字符)
    S.upper() 生成将英文转换为大写的字符串
    S.lower() 生成将英文转换为小写的字符串
    S.replace(old, new[, count]) 将原字符串的old用new代替,生成一个新的字符串
    S.startswith(prefix[, start[, end]]) 返回S是否是以prefix开头,如果以prefix开头返回True,否则返回False,
    S.endswith(suffix[, start[, end]]) 返回S是否是以suffix结尾,如果以suffix结尾返回True,否则返回False
        以下是不常用的
    S.title() 生成每个英文单词的首字母大写字符串
    S.isnumeric() 判断字符串是否全为数字字符

空白字符

是指空格,水平制表符(\t),换行符(\n)等不可见的字符

字符串格式化表达式

    作用
        生成一定格式的字符串
    运算符
        %
    语法格式
        格式字符串  %  参数值
        格式字符串  %   (参数值1, 参数值2, ...)
    说明
        % 左侧为格式字符串,
        % 右侧为参数值,当有多个参数值是用括号()括起来,并用逗号(,)分隔
        格式化字符串中以% 开头的为占位符,占位符的位置将用参数值替换
    示例
        fmt = 'name: %s, age: % d'
        s = fmt % ('yangwenjun','22')
        print(s)

格式化字符串中的占位符和类型码

    %s  字符串,使用str(x)将x转换为字符串
    %r      字符串,使用repr(x)将x转换为字符串
        repr 将 x转换为表达式
    %c  整数转为单个字符
    %d  转为十进制整数
    %o  转为八进制整数
    %x  十六进制整数(字符a-f小写)
    %X  十六进制整数(字符A-F大写)
    %e  指数型浮点数(e小写),如2.9e+10
    %E  指数型浮点数(E小写),如2.9E+10
    %f, %F  浮点数(小数形式)
    %g, %G  十进制浮点数或指数浮点数自动转换
    %%  等同于一个%字符

占位符和类型码之间的格式化语法

    % [- + 0 宽度 精度] 类型码
    - : 左对齐
    + : 显示正号
    0 : 左侧空白位置补零
    宽度: 整个字符串的字符个数
    精度: 保留小数点后多少位(默认6位)

    示例
        "%10d"  % 123     #'       123'
        "%+10d"  % 123    #'      +123'
        '%-10d' % 123     #'123       '
        '%10s'  % 'abc'   #'       abc'
        '%-5s'  % 'abc'   #'abc  '
        '%010d' % '123'   #'0000000123'
        '%7.3f' % '3.141592535897932' #'  3.141'
        '%07.2f' % '3.141592535897932' #'0003.14'