世界之大,从不在手心拙劣的掌纹之下
——24.2.3
一、字符串的定义和操作
1.定义
字符串是字符的容器,一个字符串可以存放任意数量的字符
2.字符串的下标(索引)
和其他容器如:列表、元组一样,字符串也可以通过下标进行访问
从前向后,下标从0开始
从后向前,下标从-1开始
my_str = "一切都会好的"
#通过下标取索引值
value1 = my_str[4]
value2 = my_str[-3]
print(value1) # 会
print(value2) # 好
同元组一样,字符串是一个:无法修改的数据容器
所以:
修改指定下标的字符 (如,字符串[0] = 'a')
移除特定下标的字符 (如,del字符串[0]、字符串.remove()、字符串.pop()等)
追加字符等 (如,字符串.append())
均无法完成,如果必须要做,只能得到一个新的字符串,老字符串无法修改
字符串并不支持修改
3.字符串的常用操作
1.查找特定字符串的下标索引值
语法:字符串.index(字符串)
#查找index方法
value3 = my_str.index('一切')
print(f'在字符串一切都会好的中查找一切,起始下标是:{value3}')
2.字符串的替换
语法:字符串.replace(字符串1,字符串2)
功能:将字符串内的全部:字符串1,替换为字符串2
注意:不是修改字符串本身,而是得到了一个新字符串
#替换replace方法
value4 = my_str.replace("都会","一定都会")
print(f'在字符串一切都会好的将都会替换后的结果是:{value4}')
3.字符串的分割
语法:字符串.split(分隔符字符串)
功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中
注意:字符串本身不变,而是得到了一个列表对象
#分割split方法
my_str = "一切都会好的,万事胜意,未来可期,我一直相信"
value5 = my_str.split(",")
print(f'字符串中以逗号隔开的列表元素为{value5},类型是{type(value5)}')
4.字符串的规整操作(去前后空格)
语法:字符串.strip()
5.字符串的规整操作(去前后指定字符串)
语法:字符串.strip(字符串)
#strip规整字符串方法
my_str = " 12345一切都会好的 万事胜意 我一直相信54321 "
print(my_str)
value6 = my_str.strip()
print(f"将字符串{my_str}进行strip切分后得到:{value6},类型是:{type(value6)}")
my_str = "12345一切都会好的 万事胜意 我一直相信54321"
value7 = my_str.strip("12345")
print(f"将字符串{my_str}进行strip切分后得到:{value7},类型是:{type(value7)}")
6.统计字符串内某字符串的出现次数
语法:字符串.count(统计的字符)
#统计字符串中某字符串的出现次数,count
my_str = "一切都会好的,万事胜意,未来可期,我一直相信"
count = my_str.count("一")
print(f"字符串{my_str}中含有{count}个”一“ ")
7.统计字符串的长度
语法:len(字符串)
#统计字符串的长度
my_str = "一切都会好的,万事胜意,未来可期,我一直相信"
value8 = len(my_str)
print(f"字符串{my_str}的长度是{value8}")
8.字符串常用操作汇总
9.字符串的遍历
同列表、元组一样,字符串也支持while循环和for循环进行遍历
#字符串案例
my_str1 = "一切都会好的"
i = 0
while i < len(my_str1):
print(my_str1[i])
i+=1
my_str2 = "我一直相信"
for i in my_str2:
print(i)
二、字符串的特点
作为数据容器,字符串有如下特点:
只可以存储字符串
长度任意(取决于内存大小)
支持下标索引
允许重复字符串存在
不可以修改(增加或删除元素等)
支持for循环
三、字符串练习案例:分割字符串
给定一个字符串:”itheima itcast boxuegu“
① 统计字符串内有多少个’it‘字符
② 将字符串内的空格,全部替换为字符:”|“
③ 并按照’|‘进行字符串分割,得到列表
# 给定一个字符串:”itheima itcast boxuegu“
str = "itheima itcast boxuegu"
# ① 统计字符串内有多少个’it‘字符
num = str.count("it")
print(f"字符串{str}中共有{num}个it")
# ② 将字符串内的空格,全部替换为字符:”|“
newStr = str.replace(" ","|")
print(f"将字符串{str}中的空格改为|,改后为{newStr}")
# ③ 并按照’|‘进行字符串分割,得到列表
newStr2 = str.split("|")
print(f"字符串{newStr}用|分割后得到{newStr2}")
四、数据容器(序列)的切片
1.序列
序列是指:内容连续、有序,可使用下标索引的一类数据容器
列表、元组、字符串,均可以视为序列
2.序列的常用操作——切片
序列支持切片,即:列表、元组、字符串,均支持进行切片操作
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:
起始下标表示从何处开始,可以留空,留空视作从头开始
结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
步长表示,依次取元素的间隔
步长1表示,一个个取元素
步长2表示,每次跳过1个元素取
步长N表示,每次跳过N-1个元素取
步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)
注意:此操作不会修改序列本身,而是会得到一个新的序列(列表、元组、字符串)
3.演示对序列进行切片操作
1.对列表(list)进行切片
# 1.对列表(list)进行切片,从1开始,4结束,步长为1
my_list = [0,1,2,3,4,5,6,7,8,9]
result1 = my_list[1:4] #步长默认为1
print(f'result1结果为{result1}')
# 2.对列表(list)进行切片,从3开始到1结束,步长-1
my_list = [0,1,2,3,4,5,6,7,8,9]
result2 = my_list[3:1:-1]
print(f'result2结果为{result2}')
2.对元组(tuple)进行切片
# 3.对元组(tuple)进行切片,从头开始,到最后结束,步长为1
my_tuple = (0,1,2,3,4,5,6,7,8,9)
result3 = my_tuple[:] #起始和结尾不写表示从头到尾,步长为1可以省略
print(f"result3结果为{result3}")
# 4.对元组(tuple)进行切片,从头开始到尾结束,步长-2
my_tuple = (0,1,2,3,4,5,6,7,8,9)
result4 = my_tuple[::-2]
print(f"result4结果为{result4}")
3.对字符串(str)进行切片
# 5.对字符串(str)进行切片,从头开始到最后结束,步长-1
my_str = '一切都会好的'
result5 = my_str[::-1]
print(f'result5结果为{result5}')
# 6.对字符串(str)进行切片,从头开始到最后结束,步长2
my_str = "一切都会好的"
result6 = my_str[::2]
print(f'result6结果为{result6}')
4.总结
1.什么是序列?
内容连续、有序,支持下标索引的一类数据容器
2.哪些数据容器可以视为序列?
列表、元组、字符串
3.序列如何做切片?
序列[起始:结束:步长]
起始可以省略,省略从头开始
结束可以省略,省略到尾结束
步长可以省略,省略步长为1(可以为负数,表示倒叙执行)
5.练习案例:序列的切片实践
有字符串:”意胜事万,排安的好最是都切一“
请使用学过的任何方式,得到”最好的安排“
可用方式参考:
倒叙字符串,切片取出或切片取出,然后倒序
split分割”,“replace替换”是都切一“,倒叙字符串
# 方法1:直接根据开始结束位置直接切片取出
my_str = "意胜事万,排安的好最是都切一"
method1 = my_str[9:4:-1]
print(f"方式1:{method1}")
#方法2:倒叙字符串,切片取出
my_str = "意胜事万,排安的好最是都切一"
method2 = my_str[::-1][4:9]
print(f"方式2:{method2}")
#方法3:切片取出,然后倒叙
my_str = "意胜事万,排安的好最是都切一"
method3 = my_str[5:10][::-1]
print(f"方式3:{method3}")
#方法4:split分割”,“ replace替换”来“为空,倒叙字符串
method4 = my_str.split(",")[1].replace("是都切一","")[::-1]
print(f"方式4:{method4}")