python五大数据容器 | 切片@TOC
在啃Python五大数据容器的时候,我发现切片算是新手最容易混淆的知识点之一。很多同学刚学会下标取值,一碰到切片的起始、终止、步长就乱了,尤其反向切片很容易踩空。
切片本质上是有序容器专属的截取工具,能快速提取一段子序列。
重要内容:
✅ 可以切片:字符串str、列表list、元组tuple(有顺序,支持下标访问)
❌ 不能切片:集合set、字典dict(无序结构,没有下标,直接写切片会抛出异常)
核心口诀:切片截取遵循左闭右开规则,起始位置包含在内,结束位置不取。
- 切片基础语法
(1). 语法
容器[起始下标 : 结束下标 : 步长]
起始下标:从哪个位置开始截取,包含这个位置;省略默认从头开始
结束下标:到哪个位置停止,不包含这个位置;省略默认到末尾
步长:取元素的间隔,正数从左往右取;负数从右往左取;省略默认步长=1
重点坑:左闭右开!结束下标的元素不会被拿到。
示例1:正向切片
my_list=[10,20,30,40,50,60]# 取下标1到4(不包含4)re=my_list[1:4]print(re)结果展示
[20,30,40]解释:下标1=20,下标2=30,下标3=40;下标4是50,不取。
(2).省略参数
my_list=[10,20,30,40,50,60]print(my_list[:3])# 从头取到下标3(不含3) → [10,20,30]print(my_list[2:])# 下标2取到末尾 → [30,40,50,60]print(my_list[:])# 全部复制,得到新列表 → [10,20,30,40,50,60]结果展示
[10,20,30][30,40,50,60][10,20,30,40,50,60]- 步长的作用(高频考点)
步长代表每次下标增加多少
步长=2:隔1个取1个
步长=-1:反向截取(反转容器)
my_list=[10,20,30,40,50,60]print(my_list[::2])# 从头到尾,步长2 → [10, 30, 50]print(my_list[::-1])# 从头到尾,步长-1,反转列表 → [60, 50, 40, 30, 20, 10]结果展示
[10,30,50][60,50,40,30,20,10]⚠️易错点:步长正负,要和起止方向匹配!
起始在左边,步长为负数 → 取不到任何元素,返回空。
- 负数下标切片
负数下标代表从倒数位置开始数
-1 最后一个元素,-2倒数第二个
my_tuple=(1,2,3,4,5,6)print(my_tuple[-3:-1])# 倒数第3位到倒数第1位(不含倒数第1)结果展示
(4,5)- 不同容器切片对比
# 字符串切片s="python"print(s[1:4])# yth# 元组切片t=(11,22,33,44)print(t[1:])# (22,33,44)# 列表切片list=[1,3,5,7]print(list[::2])# [1,5]结果展示
yth(22,33,44)[1,5]共同点:切片之后,都会生成一份新的数据,不会修改原容器。
- 常见踩坑总结(自己学习踩过的坑)
牢记左闭右开![0:3]只会取下标0、1、2这3个元素,下标3不取;
集合、字典不支持切片语法,直接写会报错;
[::-1]反转是生成新序列,原变量本身不会被修改;
切片下标超出范围不会触发下标越界报错,只会返回空;但单独索引lst[10]越界会直接报错。
list=[1,2,3]print(list[10:])# [] 不会报错# lst[10] 直接索引会报IndexError6.小结
切片语法:[起始:终止:步长],遵循左闭右开
只有有序容器(字符串、列表、元组)支持切片
步长正负决定读取方向;[::-1]可以快速反转序列
切片下标越界不会抛出异常,超出范围返回空序列