python基础第十五课(字符串)

字符串的驻留机制

  • 在Python中 字符串是基本数据类型,是一个不可变类型
  • 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
    在这里插入图片描述

驻留机制的几种情况

  • 字符串的长度为0或1时
  • 符合标识符的字符串
  • 字符串只在编译时进行驻留,而非运行时
  • [-5,256]之间的整数数字
s1 = ''
s2 = ''
print(s1 is s2)  # True
s1 = '%'
s2 = '%'
print(s1 is s2)  # True
# 含有数字字母下划线称为符合标识符的字符串
s1 = 'abc%'
s2 = 'abc%'
print(s1 is s2)  # False
s1 = 'abc'
s2 = 'abc'
print(s1 is s2)  # True

a = 'abc'
b = 'ab' + 'c'
c = ''.join(['ab', 'c'])
# 字符串只在编译时进行驻留,而非运行时
print(a is b)  # True
print(a is c)  # False
  • sys中的intern方法强制2个字符串指向同一个对象
a = sys.intern(b)
print(a is b)  #True

字符串的常用操作

字符串的查询操作方法

  • index() : 查找子串第一次出现的位置,如果在查找的子串不存在,抛出ValueError
  • rindex() : 查找子串最后一次出现的位置,如果在查找的子串不存在,抛出ValueError
  • find() : 查找子串第一次出现的位置,如果在查找的子串不存在,返回-1
  • rfind() : 查找子串最后一次出现的位置,如果在查找的子串不存在,返回-1
str1 = 'HelloPython'
print(str1.index('H'))  # 0
print(str1.rindex('o'))  # 9
print(str1.find('H'))  # 0
print(str1.find('a'))  # -1
print(str1.rfind('o'))  # 9
print(str1.rfind('a'))  # -1

字符串的大小写转换操作的方法

  • upper() : 把字符串中所有字符都转成大写字母
  • lower() : 把字符串中所有字符都转成小写字母
  • swapcase() : 把字符串中所有大写字母转成小写字母,把小写字母都转成大写字母
  • capitalize() : 把第一个字符转换为大写,把其余字符转换为小写
  • title() : 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
str1 = 'Hello python'
str2 = 'hello PyThon'
# 把字符串中所有字符都转成大写字母
print(str1.upper())  # HELLO PYTHON
# 把字符串中所有字符都转成小写字母
print(str1.lower())  # hello python
# 把字符串中所有大写字母转成小写字母,把小写字母都转成大写字母
print(str1.swapcase())  # hELLO PYTHON
# 把第一个字符转换为大写,把其余字符转换为小写
print(str2.capitalize())  # Hello python
# 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
print(str2.title())  # Hello Python

字符串内容对齐操作的方法

  • center() : 居中对齐
    • 第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串
  • ljust() : 左对齐
    • 第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串
  • rjust() : 右对齐
    • 第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串
  • zfill() : 右对齐
    • 左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果设置宽度小于等于实际宽度则返回原字符串
str1 = 'Hello python'
print(str1.center(20))  # '    Hello python '
print(str1.ljust(20), '---')  # 'Hello python         ---'
print(str1.rjust(20))  # '        Hello python'
print(str1.zfill(20))  # '00000000Hello python'

字符串拆分操作的方法

  • split()
    • 从字符串的左边开始拆分,默认的拆分字符是空格字符串,返回的值都是一个列表
    • 以通过参数sep指定拆分字符串是拆分符
  • rsplit()
    • 从字符串的右边开始拆分,默认的拆分字符是空格字符串,返回的值都是一个列表
    • 以通过参数sep指定拆分字符串是拆分符
str1 = 'Hello python'
str2 = 'hello|world|python'
print(str1.split())  # ['Hello', 'python']
print(str1.split(sep='l'))  # ['He', '', 'o python']
print(str2.split(sep='|'))  # ['he', 'llo', 'python']
print(str2.rsplit(sep='|'))  # ['hello', 'world', 'python']
print(str2.rsplit(sep='|', maxsplit=1))  # ['hello|world', 'python']

判断字符串操作的方法

  • isidentifier() : 判断指定的字符串是不是合法的标识符
  • isspace() : 判断指定的字符串是否全部由空白字符组成
  • isalpha() : 判断指定的字符串是否全部由字母组成
  • isdecimal() : 判断指定字符串是否全部由十进制的数字组成
  • isnumeric() : 判断指定的字符串是否全部由数字组成
  • isalnum() : 判断指定字符串是否全部由字母和数字组成
s1 = 'kdfd'
# 判断指定的字符串是不是合法的标识符
print(s1.isidentifier())  # True
# 判断指定的字符串是否全部由空白字符组成
print('\t'.isspace())  # True
# 判断指定的字符串是否全部由字母组成
print(s1.isalpha())  # True
# 判断指定字符串是否全部由十进制的数字组成
print('123'.isdecimal())  # True
# 判断指定的字符串是否全部由数字组成
print('123'.isnumeric())  # True
# 判断指定字符串是否全部由字母和数字组成
print('123dfdf'.isalnum())  # True

字符串操作的其他方法

  • 字符串替换 : replace(), 第一个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数
  • 字符串的合并 : join(), 将列表或元组中的字符串合并成一个字符串
# 字符串的替换
s1 = 'abcdefg'
s2 = s1.replace('abc', 'ABC')
print('原字符串:', s1)  # 原字符串: abcdefg
print('替换后的字符串:', s2)  # 替换后的字符串: ABCdefg
# 字符串的合并
l1 = ['hello', 'python', '123']
print('|'.join(l1))  # hello|python|123

字符串的比较操作

  • 运算符 : >, >=, <, <=, ==, !=
  • 比较规则 : 首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符串,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
  • 比较原理 : 两个字符进行比较时, 比较的是其ordinal value(原始值), 调用内置函数ord可以得到指定字符的ordinal value, 与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
print('apple' > 'app')  # True
print('apple' > 'banana')  # False
print(ord('a'), ord('b'))  # 97 98
print(chr(97), chr(98))  # a b

'''
== 与is的区别
== 比较的是value
is 比较的是id是否相等
'''
a = b = 'Python'
c = 'Python'
print(a == b)  # True
print(b == c)  # True

字符串的切片操作

  • 不具备增删改等操作
  • 切片操作将产生新的对象
s = 'hello,python'
s1 = s[:5]
s2 = s[6:]
s3 = s1 + '!' + s2
print(s1)  # hello
print(s2)  # python
print(s3)  # hello!python

print(s[1:7:2])  # el,
print(s[::2])  # hlopto

格式化字符串

  • 格式化字符串的两种方式
    • %作占位符
      • %s : 字符串
      • %i或%d : 整数
      • %f : 浮点数
    • {}作占位符
print('我的名字叫%s,我今年%d岁了!' % ('张二蛋', 18))
print('我的名字叫{0},我今年{1}岁了!'.format('张二蛋', 18))
# 表示的是3位数
print('{0:.3}'.format(3.1415926))  # 3.14
# 表示的是3位小数
print('{0:.3f}'.format(3.1415926))  # 3.142

字符串的编码与解码方式

  • 编码 : 将字符串转换为二进制数据(bytes)
  • 解码 : 将bytes类型的数据转换成字符串类型
# 编码
s = '离离原上草'
print(s.encode(encoding='GBK'))  # 在GBK中,一个中文占两个字节
print(s.encode(encoding='UTF-8'))  # 在UTF-8中,一个中文占三个字符
# 解码
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、付费专栏及课程。

余额充值