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
str1 = 'hello,hello'
print(str1.index('lo'))
print(str1.rindex('lo'))
print(str1.find('lo'))
print(str1.rfind('lo'))

 2.大小写转换:

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

3.对齐方法:

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

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

4.劈分操作: 

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

 5.判断方法:

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


    print('_a1_'.isidentifier())  # 只能是字母,数字,下划线,数字不能作为开头
    print('\t'.isspace())  # 空格 换行 水平制表符
    print('abc'.isalpha())  # 全部都是由字母组成

    print('111'.isdecimal())  # 十进制数字组成 只能是阿拉伯数字
    print('123四五'.isnumeric())  # 全部数字组成 包含罗马数字,大写数字
    print('111ABC'.isalnum())  # 全部由字母或数字组成

6.替换合并:

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

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

 7. 字符串的比较:

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

 8.字符串的切割:

    s = 'hello,python'
    print(s[1:5:1])  # 从1开始截取到5(不包含5),步长为1
    print(s[::2])    # 默认从0开始,没有写结束,默认字符串的最后一个,步长为2
    print(s[::-1])   # 默认从字符串的最后一个开始,到第一个结束,步长为负数
    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}岁 
    name = '张三'
    age = 20
    print('我叫 %s,今年 %d 岁了' % (name, age))  # % 后面跟元组
    print('我叫{0}, 今年{1}岁了'.format(name, age))  # format 方法
    print(f'我叫{name}, 今年{age}岁')  # f-string

    print('%10d' % 99)  # 10表示宽度,如果不够左边加空格补齐
    print('%.3f' % 3.1415926)  # .3表示将小数点后三位,后面四舍五入
    print('%10.3f' % 3.14159)  # 同时表示宽度和精度

    print('{0:.3}'.format(3.1415926))  # .3表示一共是3位数
    print('{0:.3f}'.format(3.1415926))  # .3f表示是3位小数
    print('{0:10.3f}'.format(3.1415926))  # 10.3f 同时设置宽度和精度,10位,3位数小数

 10.字符串的编码转换:

编码:将字符串转换为二进制数据(bytes)
解码:将bytes类型的数据转换成字符串类型
在gbk这种编码格式中,一个中文占两个字节
在utf-8这种编码格式中,一个中文占三个字节 

    print('海上生明月'.encode(encoding='utf-8'))
    print('海上生明月'.encode(encoding='utf-8').decode(encoding='utf-8'))

 

总结:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值