• 11. 字符串


    字符串是基本数据类型,是一个不可变的字符序列
    字符串可以使用 单引号 双引号 三个单引号 三个双引号 创建
    

    1.字符串的驻留机制:

    1。仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,
    python的驻留机制对相同的字符串只保留一份拷贝,后续创建的相同字符串时,不会开辟新空间,
    而是把该字符串的地址赋给新创建的变量
            a = 'python'
            b = "python"
            c = '''python'''
            这里的abc 都指向同一个内存地址
        2。交互模式:
            字符串的长度为0或1时
                a = ''
                b = ''
            符合表示标识符的字符串(标识符:字母,数字,下划线)
                a = 'abc'
                b = 'abc'
            字符串只在编译时进行驻留,而非运行时
                a = 'abc'
                b = 'ab'+'c'
                c = ''.join(['ab','c'])
                a is b # True  a is c # False
                为了后续更快,python在启动的时候就已经把能运行的各种乘除加减都算过了;那些编译时候算不了的,就只能运行的时候算,
                所以 编译后,b的值是 'abc',c的值还没算出来 所以a和c不指向同一块内存空间
                编程的工作原理分三步:
                    1.程序员在写代码的软件里写下Python这类的编程语言(高级语言)
                    2.电脑里的解释器(编译器)将我们写的字母标点转化为010之类的二进制数据
                    3.计算机读取二进制数据信息,执行相应的命令
                    这里的“+”会在第二步被编译器读取并将a和bc连接,从而产生驻留,
                而join()作为函数并不会被编译器读取,而是进入第三步被计算机识别,
                计算机识别join()函数后再将前面的空格与后面的ab,c连在一起,
                驻留机制只会发生在编译过程就是这个意思
            [-5,256]之间的整数数字
        3。sys库中的intern方法强制2个字符串指向同一个对象
            import sys
            a = 'abc%'
            b = 'abc%'
            a = sys.intern(b)
            a is b  # True
        4。pycharm对字符串进行了优化处理,所以只能在命令行中测试
        5。驻留机制的优缺点
            当需要值相同当字符串时,可以直接从字符串池里拿来使用,避免频繁当创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串比较影响性能
            在需要进行字符串拼接时建议使用 str类型当join 方法,而非+,因为join方法是先计算出所有字符串当长度,然后再拷贝,只new一次对象,效率比+高

    2. 字符串的常用操作:

    1. 查找: 

    index() 查找子串substr第一次出现的位置,如果查找的子串不存在时,抛错valueError
    rindex() 查找子串substr最后一次出现的位置,不存在时,抛错valueError
    find()  查找子串substr第一次出现的位置,不存在时,返回 -1
    rfind() 查找子串substr最后一次出现的位置,不存在时,返回 -1
    1. str1 = 'hello,hello'
    2. print(str1.index('lo'))
    3. print(str1.rindex('lo'))
    4. print(str1.find('lo'))
    5. print(str1.rfind('lo'))

     2.大小写转换:

    转换不管之前是否全大写或全小写,转换后都会产生一个新的字符串对象
    upper()  转成大写
    lower()  转换小写
    swapcase() 把大写转换成小写,小写转换成大写
    capitalize() 第一个转换为大写,其他转为小写
    title() 每一个单词大第一个字母转换为大写,剩余字符转换为小写
    1. s1 = 'hello WORLD'
    2. print(s1.upper()) # 大写
    3. print(s1.lower()) # 小写
    4. print(s1.swapcase()) # 第一个单词大写
    5. print(s1.capitalize()) # 第一个字母大写
    6. print(s1.title()) # 单词首字母大写

    3.对齐方法:

     center() 居中对齐,第一个参数指定宽度,第二个参数指定填充符,默认是空格,如果设置宽度小于实际宽度则返回原字符串 ljust() 左对齐 rjust() 右对齐 zfill() 右对齐,左边用0填充,只接受一个参数,用于指定字符串大宽度

    1. print(s1.center(20, '-')) # 总长度20
    2. print(s1.center(1)) # 低于字符串长度,返回原字符串
    3. print(s1.ljust(20)) # 左对齐
    4. print(s1.rjust(20)) # 右对齐
    5. print(s1.zfill(20)) # 右对齐 左边用0填充
    6. print('-111'.zfill(20)) # +或者- 0填充在符号对右边 -0000000000000000111

    4.劈分操作: 

    split()
        从字符串的左边开始劈分,默认的劈分字符串是空格字符串,返回值都是一个列表
        以通过sep指定劈分字符串的劈分符
        通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次数劈分之后,剩余的子串会单独作为一部分
    rsplit()
        从右边开始劈分
        如果没指定最大劈分次数 和 split结果是一样的 
    1. s = 'hello world python'
    2. print(s.split())
    3. s1 = 'hello,world,python'
    4. print(s1.split(sep=','))
    5. print(s1.split(sep=',', maxsplit=1))
    6. print(s1.rsplit(sep=','))
    7. print(s1.rsplit(sep=',', maxsplit=1))

     5.判断方法:

     isidentifier() 是不是合法的标识符 isspace() 是否全部由空白字符组成(回车、换行、水平制表符) isalpha() 是否全部由字母组成 isdecimal() 是否全部由十进制的数字组成 isnumeric() 是否全部由数字组成 isalnum() 是否 由字母和数字组成

    1. print('_a1_'.isidentifier()) # 只能是字母,数字,下划线,数字不能作为开头
    2. print('\t'.isspace()) # 空格 换行 水平制表符
    3. print('abc'.isalpha()) # 全部都是由字母组成
    4. print('111'.isdecimal()) # 十进制数字组成 只能是阿拉伯数字
    5. print('123四五'.isnumeric()) # 全部数字组成 包含罗马数字,大写数字
    6. print('111ABC'.isalnum()) # 全部由字母或数字组成

    6.替换合并:

     replace() 第一个参数指定被替换的子串,第二个参数指定替换子串的字符串, 该方法返回替换后的字符串,不改变原字符串,第三个参数指定最大替换的次数 join() 将列表或元组的字符串合并成一个字符串

    1. print('hello, hello, hello'.replace('hello', 'hi'))
    2. print('hello, hello, hello'.replace('hello', 'hi', 2))
    3. print(','.join(['hello', 'hi'])) # hello,hi
    4. print(' '.join(('hi', 'hello'))) # hi hello
    5. print('-'.join('hello')) # h-e-l-l-o

     7. 字符串的比较:

    运算符:>, >=, <, <=, ==, !=
    比较规则:
        首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,直到不想等时,其比较的结果就是两个字符串的比较结果,
    两个字符串中的所有后续字符将不再进行比较
    比较原理:
        两个字符串进行比较时,比较的是其 ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value,
    与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value 可以得到其对应的字符
    

     8.字符串的切割:

    1. s = 'hello,python'
    2. print(s[1:5:1]) # 从1开始截取到5(不包含5),步长为1
    3. print(s[::2]) # 默认从0开始,没有写结束,默认字符串的最后一个,步长为2
    4. print(s[::-1]) # 默认从字符串的最后一个开始,到第一个结束,步长为负数
    5. print(s[-6::1]) # 从索引为-6开始,到字符串到最后一个结束,步长为1

     9. 格式化字符串:

    %作占位符
        %s  字符串
        %i  或者 %d  整数
        %f  浮点数
        '我的名字叫:%s, 今年 %d 岁了' %(name, age)
    {}占位符
        '我的名字叫:{0},今年{1}岁了,我真的叫:{0}'.format(name, age)
    f-string
        f'我叫{name}, 今年{age}岁 
    1. name = '张三'
    2. age = 20
    3. print('我叫 %s,今年 %d 岁了' % (name, age)) # % 后面跟元组
    4. print('我叫{0}, 今年{1}岁了'.format(name, age)) # format 方法
    5. print(f'我叫{name}, 今年{age}岁') # f-string
    6. print('%10d' % 99) # 10表示宽度,如果不够左边加空格补齐
    7. print('%.3f' % 3.1415926) # .3表示将小数点后三位,后面四舍五入
    8. print('%10.3f' % 3.14159) # 同时表示宽度和精度
    9. print('{0:.3}'.format(3.1415926)) # .3表示一共是3位数
    10. print('{0:.3f}'.format(3.1415926)) # .3f表示是3位小数
    11. print('{0:10.3f}'.format(3.1415926)) # 10.3f 同时设置宽度和精度,10位,3位数小数

     10.字符串的编码转换:

    编码:将字符串转换为二进制数据(bytes)
    解码:将bytes类型的数据转换成字符串类型
    在gbk这种编码格式中,一个中文占两个字节
    在utf-8这种编码格式中,一个中文占三个字节 
    1. print('海上生明月'.encode(encoding='utf-8'))
    2. print('海上生明月'.encode(encoding='utf-8').decode(encoding='utf-8'))

     

    总结:

  • 相关阅读:
    高比例清洁能源接入下计及需求响应的配电网重构(matlab代码)
    基于AdGuard DNS的搭建
    Git 的基本概念和使用方式
    ES6 模块化编程 详解
    【vue3】webpack和vite介绍与使用【超详细】
    RK3588开发笔记-USB3.0接口调试
    wordpress博客趣主题个人静态网页模板
    LLC开关电源开发:第三节,LLC电路原理图及开环仿真
    使用nexus上传jar包图文教程
    【Spring boot】静态资源、首页及Thymeleaf框架
  • 原文地址:https://blog.csdn.net/fanlixing6/article/details/126849120