Python笔记3:字符串

23.字符串
  • 在Python中字符串时基本数据类型,是一个不可变的字符序列。

  • 可以用’ ‘、" “、”’ '"。

  • 字符串的驻留机制

    • 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把字符串的地址赋给新创建的变量。
    a = 'Python'
    b = "Python"
    c = '''Python'''
    print(a, id(a))
    print(b, id(b))
    print(c, id(c))
    # 输出的结果 Python 1874508798960
    
    • 驻留机制的集中情况(在交互模式下)
      • 字符串的长度为0或1时。
      • 符合标识符的字符串(字母数字下划线)。
      • 字符串旨在编译时进行驻留,而非运行时。
      • [-5, 256]之间的整数数字。
    • sys中的intern方法强制2个字符串指向同一个对象。
    • PyCharm对字符串进行了优化处理。
    • 字符串驻留机制的优缺点
      • 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
      • 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符串中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。
24.字符串中查询操作

在这里插入图片描述

# 字符串的查询操作
s = 'helllo,hello'
print(s.index('lo')) # 3
print(s.find('lo')) # 3
print(s.rindex('lo')) # 9
print(s.rfind('lo')) # 9

print(s.index('k')) # ValueError:
print(s.find('k')) # -1
25.字符串的大小写转换操作

在这里插入图片描述

# 字符串的大小写转换
s = 'hello,python'
a = s.upper() # 转成大写后,会产生一个新的字符串对象
b = s.lower() # 转换之后,会产生一个新的字符串对象
S2 = 'hello, Python'
print(s2.swapcase())
print(s2.title())
26.字符串内容对齐操作

在这里插入图片描述

s = 'hello,Python'
print(s.center(20,'*'))
print(s.ljust(20,'*'))
print(s.rjust(20,'*'))
27.字符串劈分操作

在这里插入图片描述

s = 'hello world Python'
lst = s.split()
print(lst) # ['hello', 'world', 'Python']
s1 = 'hello|world|Python'
print(s1.split(sep='|')) # ['hello', 'world', 'Python']
print(s1.split(sep='1',maxsplit=1)) # ['hello', 'world|Python']

# rsplit()从右侧开始劈分
print(s.rsplit())
print(s1.rsplit('|'))
print(s1.rsplit(sep='|', maxsplit=1))
28.判断字符串操作的方法

在这里插入图片描述

s = 'hello,python'
print('1.', s.isidentifier()) # False
print('2.', 'hello'.isidentifier()) # True
print('3.', '张三_'.isidentifier()) # True
print('4.', '张三_123'.isidentifier()) # True

print('5.', '\t'.isspace()) # True

print('6.', 'abc'.isalpha()) # True
print('7.', '张三'.isalpha()) # True
print('8.', '张三1'.isalpha()) # False

print('9.', '123'.isdecimal()) #True
print('10.', '123四'.isdecimal()) # False

print('11.', '123'.isnumeric()) #True
print('12.', '123四'.isnumeric()) # True

print('13.', 'abc1'.isalnum()) #True
print('14.', '法外狂徒张三123'.isalnum()) # True
print('15.', 'abc!'.isalnum()) #False
29.字符串操作其他方法

在这里插入图片描述

s = 'hello,Python'
print(s.replace('Python', 'Java')) # hello,Java
s1 = 'hello,Python,Python,Python'
print(s1.replace('Python','Java',2)) # hello,Java,Java,Python

lst = ['hello','Java', 'Python']
print('|'.join(lst)) # hello|Java|Python

t = ('hello', 'Java', 'Python')
print(''.join(t)) # helloJavaPython

print('*'.join('Python')) # P*y*t*h*o*n
30.字符串的比较操作
  • 运算符:>, >=, <, <=, ==, !=
  • 比较规则:首先比较两个字符串中的第一个字符串,如果相等则继续比较下一个字符串,依次比较下去,知道两个字符串中的字符不相等时,其比较结果就是两个字符串比较的结果,两个字符串中的所有后续字符串将不再进行比较。
  • 比较原理:两个字符串进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时,指定ordinal value可以得到其对应的字符。
31.字符串的切片操作
  • 字符串时不可变类型
  • 不具备增、删、改等操作
  • 切片操作将产生新的对象
32.格式化字符串
  • 格式化字符串的两种方式

    • %作占位符
      在这里插入图片描述

    • {}作占位符
      在这里插入图片描述

      # 格式化字符串
      # % 占位符
      name = '张三'
      age = 20
      print('我叫%s,今年%d岁' % (name,age))
      
      # {} 占位符
      print('我叫{0},今年{1}岁'.format(name, age))
      
      # f-string
      print(f'我叫{name}, 今年{age}岁')
      
      print('%10d' % 99) # 10表示的是宽度
      print('%.3f' % 3.1415926) # .3表示是小数点后三位
      # 同时表示宽度和精度
      print('10.3f' % 3.1415726) # 一共总宽度10 小数点后3位
      
      print('{0}'.format(3.1415926))
      print('{0:.3}'.format(3.1415926)) # .3表示的是一共有三位数
      print('{0:.3f}'.format(3.1415926)) # .3f表示的是有三位小数
      print('{0:10.3f}'.format(3.1415926)) # 同时设置宽度和精度,10表示宽度为10,.3f表示的是有三位小数
      
33.字符串的编码
  • 为什么需要字符串的编码转换
    在这里插入图片描述

  • 编码与解码的方式

    • 编码:将字符串转换为二进制数据(bytes)
    • 解码:将bytes类型的输转换成字符串类型
    s = '法外狂徒张三'
    # 编码
    print(s.encode(encoding='GBK')) # 在GBK编码格式中,一个中文占两个字节
    print(s.encode(encoding='UTF-8')) # 在UTF-8编码格式中,一个中文占三个字节
    #解码
    # byte代表就是一个二进制数据(字节类型的数据)
    byte = s.encode(encoding='GBK')
    print(byte.decode(encoding='GBK'))
    

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值