python切片
注:此篇文章以列表为例,详细展开对python切片的剖析,纯手码
一、特征
1、切片是根据索引进行截取,有序序列才有索引,必须针对有序序列(字符串、列表、元组)
2、截取是包头不包尾(可以理解为前闭后开)
3、截取有步长(隔几个元素截取一次)
4、可以从前往后截取,也可以从后往前截取。区别就是一个步长是正,一个步长是负(这句话很重要)
5、切片后的列表是一个新的对象,指向新的内存地址,属于深拷贝
6、切片后的列表中的元素不是新的对象,是跟被切片的列表元素指向同一内存地址,属于浅拷贝
注:深浅拷贝请详见上篇文章https://www.cnblogs.com/gaofeng-01/p/16788576.html
二、实际操作
# 表达式 [star_num:end_num:step_length]
# 正向 0 1 2 3 4
lst1 = ['a', 'b', 'c', 'd', 'e']
# 负向 -5 -4 -3 -2 -1
# 正向截取(int(step_length) >=1)
lst1_1 = lst1[:] # 默认从0开始往后截取,结束默认取最后一个元素,步长默认为1
lst1_2 = lst1[0:] # 从0开始往后截取,结束默认取最后一个元素,步长默认为1
lst1_3 = lst1[0:-1] # 从0开始往后截取,取到-1前一个,步长默认为1,>>>['a', 'b', 'c', 'd']
lst1_4 = lst1[-5:-1] # 从-5开始往后截取,取到-1前一个,步长默认为1,>>>['a', 'b', 'c', 'd']
lst1_5 = lst1[::2] # 开头默认从0开始往后截取,结束默认取最后一个元素,步长指定为2,>>>['a', 'c']
lst1_6 = lst1[-5:-1:-1] # >>>[] 因为截取顺序和步长的对应关系违反了切片的特征,所以返回空列表
# 负向截取(int(step_length) <=-1)
lst1_7 = lst1[::-1] # 步长为负,则是从后往前截取,相当于翻转列表 >>>['e', 'd', 'c', 'b', 'a']
lst1_8 = lst1[-1::-1] # 步长为负,从-1开始往前截取 >>>['e', 'd', 'c', 'b', 'a']
lst1_9 = lst1[-1:2:-1] # 步长为负,从-1开始往前截取 >>>['e', 'd']
lst1_10 = lst1[-1:-5:1] # >>>[] 因为截取顺序和步长的对应关系违反了切片的特征,所以返回空列表
三、切片原理
# 切片原理
lsta = ['a', 'b', 'c', 'd', 'e']
lstb = lsta[:] # 申请一个新的内存地址,生成一个新的对象。但是对象中的元素还是指向原来的内存地址
if not (lsta is lstb): # not False判断两个列表指向不同的内存地址
if lsta[0] is lstb[0]: # 判断两个列表中的元素指向同一内存地址
print("切片特征5、6")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界