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") 

 

 

 

 

 

posted @   杰个就斯爱情o  阅读(307)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示