075_字符串的创建和驻留机制
"""
课程视频:75_字符串的创建和驻留机制
学习时间:2022/4/13 19:42
"""
# 字符串的驻留机制:相同的字符串只保留一份拷贝
# 创建相同字符串时,把该字符串的地址赋给新变量,避免频繁的创建和销毁,提升效率节约内存
# 因此,拼接和修改字符串比较影响性能
# 拼接字符串,建议使用str类型的join方法,而非+,join()先计算所有字符长度再拷贝,只new一次对象
a = 'python'
b = "python"
c = '''python'''
print(a, id(a))
print(b, id(b))
print(c, id(c))
s1 = 'abc%'
s2 = 'abc%'
print(s1 is s2) # 原本为False,但PyCharm对字符串进行了优化处理,显示True
076_字符串的查询
"""
课程视频:76_字符串的常用操作_查询
学习时间:2022/4/13 20:10
"""
# index():查找子串substr第一次出现的位置,如不存在,则ValueError
# rindex():查找子串substr最后一次出现的位置,如不存在,则ValueError
# find():查找子串substr第一次出现的位置,如不存在,则返回-1
# rfind():查找子串substr最后一次出现的位置,如不存在,则返回-1
s = 'hello,hello'
print(s.index('lo'))
print(s.find('lo'))
print(s.rindex('lo'))
print(s.rfind('lo'))
# print(s.index('k')) # 不存在则报错,ValueError: substring not found
print(s.find('k')) # 不存在则返回-1
# print(s.rindex('k')) # 不存在则报错,ValueError: substring not found
print(s.rfind('k')) # 不存在则返回-1
077_字符串的大小写转换
"""
课程视频:77_字符串的常用操作_大小写转换
学习时间:2022/4/13 20:21
"""
# upper():把字符串中所有字符转成大写
# lower():把字符串中所有字符转成小写
# swapcase():把字符串中所有大写转成小写,所有小写转成大写 [swapcase 交换箱]
# capitalize():把第一个字符转为大写,其余字符转为小写
# title():把每个单词第一个字符转为大写,剩余字符转为小写
s1 = 'hello,hello'
a = s1.upper() # 转换之后会形成新的字符串对象
print(s1, id(s1))
print(a, id(a))
b = s1.lower() # 转换之后会形成新的字符串对象
print(s1, id(s1))
print(b, id(b))
print(s1 == b) # True
print(s1 is b) # False
s2 = 'hello,Hello'
print(s2.swapcase())
print(s2.capitalize())
print(s2.title())
078_字符串的对齐
"""
课程视频:78_字符串的常用操作_对齐
学习时间:2022/4/13 20:40
"""
# center():居中对齐,参数1指定宽度,参数2可指定填充符,默认空格,设置宽度不够则返回原字符串
# ljust():左对齐,参数1指定宽度,参数2可指定填充符,默认空格,设置宽度不够则返回原字符串
# rjust():右对齐,参数1指定宽度,参数2可指定填充符,默认空格,设置宽度不够则返回原字符串
# zfill():右对齐,左边用0填充,只接收1个参数用于指定宽度,设置宽度不够则返回原字符串
s = 'hello,Python'
print(s.center(30, '-'))
print(s.ljust(30, '-'))
print(s.rjust(30, '-'))
print(s.zfill(30))
print(s.center(5, '-')) # 设置宽度不够则返回原字符串
print(s.zfill(5)) # 设置宽度不够则返回原字符串
print('6789'.zfill(10))
print('-789'.zfill(10)) # -000000789,0添加在负号之前
079_字符串的劈分
"""
课程视频:79_字符串的常用操作_劈分
学习时间:2022/4/13 20:58
"""
# split():从左开始劈分 rsplit():从右开始劈分
# 默认劈分字符是空格字符串,返回值是一个列表
# 通过参数sep指定劈分符
# 通过参数maxsplit指定最大劈分次数,最大劈分后剩余的子串单独作为一个部分
s1 = 'hello world Python'
print(s1.split())
s2 = 'hello|world|Python'
print(s2.split(sep='|'))
print(s2.split(sep='|', maxsplit=1))
print('------------------')
print(s1.rsplit())
print(s2.rsplit('|'))
print(s2.rsplit('|', maxsplit=1))
080_字符串的判断
"""
课程视频:80_字符串的常用操作_判断
学习时间:2022/4/13 21:16
"""
# isidentifier() 判断指定的字符串是否合法的标识符(字母、数字、下划线)
# isspace() 判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符)
# isalpha() 判断指定的字符串是否全部由字母组成
# isdecimal() 判断指定的字符串是否全部由十进制数字组成
# isnumeric() 判断指定的字符串是否全部由数字组成
# isalnum() 判断指定的字符串是否全部由字母和数字组成
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.', 'abcde'.isalpha()) # True
print('7.', '张三'.isalpha()) # True
print('8.', '张3'.isalpha()) # False
print('9.', '123'.isdecimal()) # True
print('10.', '123四'.isdecimal()) # False 中文数字不是十进制数字
print('11.', 'ⅰⅱⅲⅳ'.isdecimal()) # False 罗马数字不是十进制数字
print('12.', '123'.isnumeric()) # True
print('13.', '123四'.isnumeric()) # True 中文数字是数字
print('14.', 'ⅰⅱⅲⅳ'.isnumeric()) # True 罗马数字是数字
print('15.', 'abc123'.isalnum()) # True
print('16.', '张三123'.isalnum()) # True
print('17.', 'abc!'.isalnum()) # False
081_字符串的替换与合并
"""
课程视频:81_字符串的替换与合并
学习时间:2022/4/13 21:46
"""
# replace() 参数1:被替换的子串,参数2:替换子串的字符串,参数3:最大替换次数
# join() 将列表或元组中的字符串合并成一个字符串
s = 'hello,Python,Python,Python,Python'
print(s.replace('Python', 'Java')) # 全部替换
print(s.replace('Python', 'Java', 2)) # 第三参数换2次
lst = ['hello', 'Java', 'Python']
print('|'.join(lst))
print(' '.join(lst))
print(''.join(lst))
t = ('hello', 'Java', 'Python')
print('|'.join(t))
print(' '.join(t))
print(''.join(t))
print('-'.join('Python')) # P-y-t-h-o-n
082_字符串的比较
"""
课程视频:82_字符串的比较
学习时间:2022/4/13 23:22
"""
# 运算符:>,>=,<,<=,==,!=
# 运算规则:依次比较两个字符串中的字符,直至出现不相等即为比较结果,后续字符不再比较
# 比较原理:比较ordinal value(原始值)
# 内置函数ord可以得到指定字符对应的ordinal value
# 内置函数chr可以得到指定ordinal value的对应字符
print('apple' > 'app') # True
print('apple' > 'banana') # False
print(ord('a'), ord('b')) # a的ordinal value为97,b的为98
print(chr(97), chr(98)) # a b
print(chr(26472)) # 杨
# ==比较的是value,is比较的是id
a = b = c = 'Python'
print(a == b == c) # True
print(a is b is c) # True
083_字符串的切片
"""
课程视频:83_字符串的切片
学习时间:2022/4/13 23:41
"""
# 字符串是不可变类型
# 不具备增、删、改等操作。切片操作将产生新对象
s = 'hello,Python'
s1 = s[:5] # 从0切到5之前
s2 = s[6:] # 从6切到最后
print(s1)
print(s2)
print(s1 + '!' + s2)
print(s[1:5:1])
print(s[::2])
print(s[::-1])
print(s[-6:])
084_格式化字符串
"""
课程视频:84_格式化字符串
学习时间:2022/4/13 23:52
"""
# 1. %作占位符: %s-->str, %d-->int, %f-->float
name = '张三'
age = 20
money = 19.87
print('我叫%s,今年%d岁,我有%f元' % (name, age, money))
# %5s的5表示宽度,%.2f的.2表示精度
print('我叫%5s,今年%d岁,我有%.2f元' % (name, age, money))
# 2. {}作占位符:
print('我叫{0},今年{1}岁,我真的叫{0}'.format(name, age))
# 3. f-string
print(f'我叫{name},今年{age}岁')
print('%10.2f' % 3.1415927) # 同时设置宽度和精度
print('%10.3f' % 3.1415927)
print('%10.4f' % 3.1415927)
print('{0:.4}'.format(3.1415927)) # .4 表示一共4位数
print('{0:.4f}'.format(3.1415927)) # .4f表示一共4位小数
print('{0:10.4f}'.format(3.1415927)) # 同时设置宽度和精度
085_字符串的编码转换
"""
课程视频:85_字符串的编码转换
学习时间:2022/4/14 0:27
"""
# 编码:将字符串转换为二进制数据(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'))
byte = s.encode(encoding='UTF-8')
print(byte.decode(encoding='UTF-8'))
# 编码解码的格式要相同
知识点总结