1、字符串的介绍
字符串是 Python 中最常用的数据类型,是不可变的(同一内存地址下的数据不可以变)
(1)创建字符串
- 使用一对单引号来创建
var1 = 'Hello World!'
- 使用一对双引号来创建
var1 = "Hello World!"
- 一对三个单引号或者一对三个双引号包裹
#三个单引号
str1 = '''
1、吃饭
2、睡觉
3、玩
'''
#三个双引号
str2 = """
1、吃饭
2、睡觉
3、玩
"""
注意:用三个单引号或者三个双引号的好处是可以换行,上面的例子执行print()函数后会换行输出,一个单引号或者一个双引号不可以换行,
(2)转义字符 \ 让符号失去原有的意义
通过上面的学习我们如果想要定义“你好”这两个字符串很容易,但是假如要定义带有双引号的字符串呢,按照上面的逻辑是不是应该这样 写str3 = ""你好""
,显然这是不对的,因为我们字符串就是通过引号来包裹定义的,这个引号是个特殊字符,是申明字符串用的,但是我们现在想用的是把引号申明成一个字符串,这个时候就引出了转义字符,他的作用是让特殊符号失去原有的意义
str3 = "你好"
#转义字符的用法是在想要转义的字符前面添加\
str4 = "\"你好\""
print(str3) # 你好
print(str4) # "你好"
(3)在字符串的前面加 r 可以去除转义字符
首先介绍\n和\t两个转义字符,\n表示换行 \t表示制表符,也就是字符串中如果有\n或者\t就会换行输出
str5 = "大家注意防护\n不要阳了"
str6 = r"大家注意防护\n不要阳了"
print(str5)#下面是str5输出的内容,换行显示
"""
大家注意防护
不要阳了
"""
#注意,str6中前面加了r,\n转义字符就失效了,输出时就被当作了字符串
print(str6) # 大家注意防护\n不要阳了
(4)在定义字符串的时候,可以使用单双引号嵌套
str7 = '想死"你们"了'
print(str7) # 想死"你们"了
str8 = "想死'你们'了"#想死'你们'了
2、字符串的常见操作
(1) 字符串的访问
str1 = '刚刚闭幕的中央经济工作会议是党的二十大后党中央召开的一次非常重要的会议。'
# 通过下标的方式访问字符串
print(str1[0])#刚
print(str1[11])#会
(2) 遍历字符串
# 第一种方式: i表示字符串中的每个字符
for i in str1:
print(i)
# 第二种方式: i表示字符串中字符的下标
for i in range(len(str1)):
print(str1[i])
# 第三种方式:enumerate() k表示下标 v表示值
for k,v in enumerate(str1):
print(k,v)
(3) 字符串的拼接
#只能是字符串和字符串之间使用 + 拼接
str1 = 'welcome to'
str2 = '昆明'
num = 10
# print(str1 + str2) welcome to 昆明
# print(str1 + num) # 报错
(4) 重复输出字符串
str2 = '昆明'
# print(str2 * 3) # 昆明 昆明 昆明
(5) 字符串的切片
#字符串[开始下标:结束下标] 0 表示第一个 -1表示最后一个
str3 = 'good good study,day day up'
print(str3[1:5]) # ood
print(str3[1:]) # ood good study,day day up
print(str3[:6]) # good g
#下面这个语法两层意思
#1、取出0到最后一个
#2、倒序
print(str3[::-1]) # pu yad yad,yduts doog doog
(6) 使用成员运算符判断字符是否在字符串中 in 和 not in
#判断字符串在不在其中
str4 = 'i love you forever'
print('love' in str4) # True
print('love' not in str4) # False
3、字符串的格式化输出
(1)占位符
'''
占位符: %
整数: %d
小数: %f
字符串: %s
3位小数: %.3f
2位小数: %.2f
'''
name = '李小华'
age = 23
height = 170
money = 38.6435
print("姓名:%s,年龄:%d,身高:%d,财富:%.2f"%(name,age,height,money))
#输出:姓名:李小华,年龄:23,身高:170,财富:38.64
(2)使用f,f"{变量名}"
print(f"姓名:{name},年龄:{age},身高:{height},财富:{round(money,2)}")
#输出:姓名:李小华,年龄:23,身高:170,财富:38.64
4、获取字符串长度和出现的次数
str1 = "抗原转阴后又阳了,是没好彻底吗?复阳和再感染后有传染性吗?什么情况更容易发生二次感染?近期,有关新冠复阳再感染”等话题引发不少网友的讨论。央视新闻采访北京佑安医院感染综合科主任医师李侗曾,就网友关切带来解读!"
# 1.获取字符串的长度 len()
print(len(str1)) # 104
# 2.统计子串在整个字符串中出现的次数 count('统计的内容','开始的位置','结束的位置') 后面的两个的参数是可选参数,可以不用写
print(str1.count('阳')) # 3
print(str1.count('阳',1,20)) # 2
5、字符串大小写的转换
str1 = 'i Miss You Very Much'
# upper() 将字符串中的小写字母转换为大写字母
print(str1.upper()) # I MISS YOU VERY MUCH
# lower() 将字符串中的大写字母转换为小写字母
print(str1.lower()) # i miss you very much
# swapcase()将字符串中的大写字母转换为小写,将小写字母转换为大写
print(str1.swapcase()) # I mISS yOU vERY mUCH
# title()将字符串中的每个单词的首字母转换为大写
str2 = 'welcome to qian feng'
print(str2.title()) # Welcome To Qian Feng
6、字符串填充
#
str1 = "梅西携队凯旋球迷接机欢庆"
# center(填充后的长度,填充的内容) 将字符串按照指定的内容填充到指定长度,默认填充的内容是空格
print(str1)#梅西携队凯旋球迷接机欢庆
print(str1.center(50))# 梅西携队凯旋球迷接机欢庆
print(str1.center(50,'*')) # *******************梅西携队凯旋球迷接机欢庆*******************
# ljust(填充后的长度,填充的内容) 向左填充, 原内容靠左,填充的内容靠右
print(str1.ljust(50,'%')) # 梅西携队凯旋球迷接机欢庆%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# rjust(填充后的长度,填充的内容) 向右填充, 原内容靠右,填充的内容靠左
print(str1.rjust(50,'+')) # ++++++++++++++++++++++++++++++++++++++梅西携队凯旋球迷接机欢庆
# zfill(填充后的长度) 使用数字0 填充字符串到指定的长度
print(str1.zfill(50)) # 00000000000000000000000000000000000000梅西携队凯旋球迷接机欢庆
7、字符串的查找
(1) find(查找的内容,开始的位置,结束的位置)查找字符在字符串中第一次出现的位置,返回的是下标.
str1 = "1234567890qwertyuiopasqdfghjklQWERTYUIOPqASJDFGHJKqLqW"
# print(str1.find('q')) # 10 未指定开始位置和结束位置,表示从整个字符串查找
# print(str1.find("W")) # 31
# 指定范围查找
# print(str1.find('o',1,40)) # 18 表示从下标1的位置开始一直到下标为40的位置之间进行查找
# 不存在的情况,返回-1
# print(str1.find('z')) # -1
(2) rfind(查找的内容,开始的位置,结束的位置)查找字符在字符串中最后一次出现的位置,返回的是下标. 若未找到返回-1
str1 = "1234567890qwertyuiopasqdfghjklQWERTYUIOPqASJDFGHJKqLqW"
print(str1.rfind('q')) # 52
print(str1.rfind('n')) # -1
# 指定范围查找
print(str1.rfind('q',10,30)) # 22
(3) index()功能和find()类似,区别是,若未找到字符串,则直接报错
# print(str1.index('m')) # ValueError: substring not found
print(str1.index('q')) # 10
(4) 按照ASCII值进行获取
# max()最大 min()最小
print(max(str1)) # y
print(min(str1)) # 0
8、字符串去除内容
str1 = " today is a nice day "
str2 = "** today is a nice day ***"
# 1、去除字符串两边的空格
# print(str1.strip())
# 2、去除指定的字符 *
# print(str2.strip('*'))
# 3.lstrip() 去除左边的指定字符(默认去除的是空格)
# print(str1.lstrip())
# print(str2.lstrip('*'))
# 4.rstrip() 去除右边的指定字符(默认去除的是空格)
# print(str1.rstrip())
# print(str2.rstrip('*'))
9、字符串的分割和合并
(1)split()以指定字符对目标字符串进行分割(默认是空格),的到的是一个数组
str1 = "this is a string example...."
str2 = "this*is*a*string*example...."
# 使用空格分割
# print(str1.split()) # ['this', 'is', 'a', 'string', 'example....']
# 使用指定字符切割
# print(str2.split('*')) # ['this', 'is', 'a', 'string', 'example....']
(2)splitlines() 按照行分割
str3 = """
悟道休言天命,
修行务取真经.
一悲一喜一枯荣,
哪个前生注定.
"""
# print(str3.splitlines()) # ['', '悟道休言天命,', '修行务取真经.', '一悲一喜一枯荣,', '哪个前生注定.']
# 3.合并 join() 以指定字符合并字符串
ss1 = '-'
list1 = ['hello','everybody','nice','to','meet','you']
print(ss1.join(list1)) # hello-everybody-nice-to-meet-you
(3)合并(数组合并成字符串)
# join() 以指定字符合并字符串
ss1 = '-'
list1 = ['hello','everybody','nice','to','meet','you']
print(ss1.join(list1)) # hello-everybody-nice-to-meet-you
10、字符串的替换
# 1.replace(要替换的内容,替换后的内容,替换的次数) # 使用指定的内容对字符串中的数据进行替换
'''
第三个参数是可选参数,不写的话表示全部替换.
'''
str1 = "最高法原法官:垃圾,因传播奥密克戎被处罚的人垃圾,建议司法机关予以纠错.垃圾,辣鸡,扯犊子,垃圾."
print(str1) # 最高法原法官:垃圾,因传播奥密克戎被处罚的人垃圾,建议司法机关予以纠错.垃圾,辣鸡,扯犊子,垃圾.
print(str1.replace('垃圾','**')) # 最高法原法官:**,因传播奥密克戎被处罚的人**,建议司法机关予以纠错.**,辣鸡,扯犊子,**.
# 控制替换的次数
print(str1.replace('垃圾','**',2)) # 最高法原法官:**,因传播奥密克戎被处罚的人**,建议司法机关予以纠错.垃圾,辣鸡,扯犊子,垃圾.
11、字符串的判断
(1) isupper() 检测字符串中的字母是否全部大写
str1 = "1234asdfgXCVBNM"
str2 = "SDFGH98765"
print(str1.isupper()) # False
print(str2.isupper()) # True
(2) islower() 检测字符串中的字母是否全部小写
str3 = "rtyui9876"
str4 = "dfghjMNBVC3456"
print(str3.islower()) # True
print(str4.islower()) # False
(3) isdigit() 检测字符串是否是全部是数字组成
str5 = '12345'
str6 = "dfghj98765FGHJ"
print(str5.isdigit()) # True
print(str6.isdigit()) # False
(4) istitle() 检测字符串中的单词首字母是否大写
str7 = 'hello world'
str8 = 'Good Night'
print(str7.istitle()) # False
print(str8.istitle()) # True
(5) isalpha() 检测字符串是否只有文字和字母组成
str9 = '你好everyone'
str10 = '中国876dfghjXCVB'
print(str9.isalpha()) # True
print(str10.isalpha()) # False
12、字符串的前缀和后缀
# 前缀和后缀是指:判断字符串是否以指定字符开头或者以指定字符结束
# startswith():表示以指定字符开头
str1 = 'HelloPython'
print(str1.startswith('Hello')) # True
# endswith() :表示以指定字符结束
print(str1.endswith('thon')) # True
13、字符串的编码和解码
# 编码和解码一般用于数据的网络传输
# encode() 编码
# decode() 解密
str1 = '你好Python'
# 编码
print(str1.encode('utf-8')) # b'\xe4\xbd\xa0\xe5\xa5\xbdPython'
print(str1.encode('gbk')) # b'\xc4\xe3\xba\xc3Python'
# 解码
str2 = b'\xe4\xbd\xa0\xe5\xa5\xbdPython'
str3 = b'\xc4\xe3\xba\xc3Python'
print(str2.decode('utf-8')) # 你好Python
print(str3.decode('gbk')) # 你好Python
14、ASCII值的转换
# chr() 表示将对应的ASCII的值转换为字符
# ord() 获取对应字符的ASCII的值
print(chr(87)) # W
print(ord('s')) # 115