数据容器(序列)的切片
序列:内容连续、有序,可使用下标索引的一类数据容器。
列表、元组、字符串,均可以视为序列。
元素1,元素2,元素n
0, 1, n ——正向下标
-n, -2, -1 ——反向下标
序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满足这个要求。
序列的常用操作-切片
序列支持切片,即:列表、元组、字符串,均支持进行切片操作。
切片:从一个序列中,取出一个子序列。
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:
1、起始下标表示从何处开始,可以留空,留空视作从头开始
2、结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
3、步长表示,依次取元素的间隔:
①步长1表示,一个个取元素
②步长2表示,每次跳过1个元素取
③步长N表示,每次跳过N-1个元素取
④步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)
注意,此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)。
示例:
# 对list进行切片,从1开始,4结束,步长1
my_list = [0, 1, 2, 3, 4, 5, 6]
result1 = my_list[1:4] # 默认步长是1,所以可以省略不写
print(f"结果1:{
result1}")
# 对tuple进行切片,从头开始,到最后结束,步长1
my_tuple = (0, 1, 2, 3, 4, 5, 6)
result2 = my_tuple[:] # 起始和结束不写表示从头到尾,步长为1可以省略
print(f"结果1:{
result2}")
# 对str进行切片,从头开始,到最后结束,步长2
my_str = "0,1,2,3,4,5,6,7"
result3 = my_str[::2]
print(f"结果1:{
result3}")
# 对str进行切片,从头开始,到最后结束,步长-1
my_str = "0,1,2,3,4,5,6,7"
result4 = my_str[::-1] # 等同于序列反转了
print(f"结果1:{
result4}")
# 对列表进行切片,从3开始,1结束,步长-1
my_list = [0, 1, 2, 3, 4, 5, 6]
result5 = my_str[3:1:-1]
print(f"结果1:{
result5}")
# 对元组进行切片,从头开始,到最后结束,步长-2
my_tuple = (0, 1, 2, 3, 4, 5, 6)
result6 = my_tuple[::2]
print(f"结果1:{
result6}")
运行结果:
结果1:[1, 2, 3]
结果1:(0, 1, 2, 3, 4, 5, 6)
结果1:01234567
结果1:7,6,5,4,3,2,1,0
结果1:,1
结果1:(0, 2, 4, 6)
序列的切片总结
1、序列:内容连续、有序,支持下标索引的一类数据容器。
2、可以视为序列:列表、元组、字符串。
3、序列如何做切片:序列[起始:结束:步长]。
4、起始可以省略,省略从头开始。
5、结束可以省略,省略到尾结束。
6、步长可以省略,省略步长为1(可以为负数,表示倒序执行)。
序列切片实践
# 三种方式取出我是二狗
my_str = "狗二是我1,nohtyp学"
# 倒序字符串,切片取出
result1 = my_str[::-1][9:13]
print(f"1的结果:{
result1}")
# 切片取出,然后倒序
result2 = my_str[0:4][::-1]
print(f"2的结果:{
result2}")
# split分隔“,” replace替换“来”为空,倒序字符串
result3 = my_str.split(",")[0].replace("1", "")[::-1]
print(f"3的结果:{
result3}")
运行结果:
1的结果:我是二狗
2的结果:我是二狗
3的结果:我是二狗