Python列表切片操作的一些问题

Python列表切片操作的一些问题

列表操作用到切片的场景

1、通过切片获取列表元素(会生成新的容器)

list01=['a','b','c','d','e']
#不使用切片,意即list02和list01引用同一个列表
list02=list01 
#通过切片获取list01全部元素,并且会生成一个新的容器,交给list02,此时list01和list02引用的不是同一个列表
list02=list01[:] 
注意:这里涉及到浅拷贝和深拷贝的概念,list02=list01[:] 是浅拷贝

2、通过切片修改列表元素(会依次遍历右边对象)

#使用切片定位列表中的一个位置,对列表进行修改
list01[1:2]='12345'
输出结果为:['a','1','2','3','4','5','c','d','e']
#如果使用索引定位,对列表进行修改
list[1]='12345'
输出结果为:['a','12345','c','d','e']

可以看到,通过切片修改列表元素,会将赋值号右边对象依次遍历,然后插入到切片定位的位置。索引不会。

注意:如果右边对象不可遍历,就会报错!
list01[1:2]=12345
#打印后报错,因为int类型的12345是一个不可迭代的对象
TypeError: can only assign an iterable

一些需要特别注意的问题

1、切片定位的位置

可以和索引效果一样--定位某一个元素的位置
list01[1] 和 list01[1:2] 定位效果相同
可以定位多个元素的位置
list[1:3] 定位到的位置为索引为12的元素的位置
可以定位到元素之间的夹缝位置
list[1:1] 这样定位到的是索引0和索引1之间的位置!(不是索引1和索引2之间的位置)

2、步长为-1的时候会遇到的情况

前面的情况,步长都为默认的1,也就是切片从前往后进行,
如果步长为-1

获取元素的情况:
list02=list01[::-1] #list02获得的是倒序的list01

修改元素的情况:
list01[2:1:-1]=12345 #同样报错说右边必须可迭代
list01[2:1:-1]='12345' 
也会报错ValueError: attempt to assign sequence of size 5 to extended slice of size 1
list01[2:1:-1]='1' 
输出结果:['a', 'b', '1', 'd', 'e'] 只有这样才不报错!

原因:前面步长为1时,切片插入元素,会将插入位置后面的元素往后挤;
	但是步长为-1时,切片插入元素,是从后往前插入,索引为0的位置不能改变,即列表可以往后变长,但是不能往前。
	故切片插入元素,如果步长-1,切片定位多少个元素,就只能插入多少元素,不能少也不能多!
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值