如何理解python中列表的切片?

如何理解python中列表的切片?

概述

很多刚接触python的小伙伴可能都对这个切片知识点理解得不够彻底。如a[1:9:-2]这是什么啊?双括号[]里面不是只能放入两个参数吗?怎么可以放三个参数?我刚学python总是搞不清楚第三个参数是干嘛的。

理解切片

一、普通的切片不用多说,比如要获取第1个到第2个的列表,则直接用a[0, 2]就可以了,可以理解是a[0]和a[1]组成的列表,注意这里不包含a[2]。

a = [1, 3, 9, 3, 5, 6, -1]
print(a[0: 2])	#[1, 3]

当然列表也可以用负索引。如a[-5: -1]相当于a[2: 6],-5的负索引值对应正索引值2,-1的负索引值对应正索引值6。

a = [1, 3, 9, 3, 5, 6, -1]
a[-5:-1]		#[9, 3, 5, 6]

二、切片不填参数。
①当第一位参数不填参数时,相当于第一位参数填0。所以a[: 3]的值为[1, 3, 9]。

a = [1, 3, 9, 3, 5, 6, -1]
a[: 3]	#[1, 3, 9]

②当第二位参数不填参数时,相当于第二位参数填len(a)。所以a[: 3]的值为[3, 5, 6, -1]。

a = [1, 3, 9, 3, 5, 6, -1]
a[3: ]	#[3, 5, 6, -1]

③当第一位和第二位都不填参数时,相当于①和②两种组合起来a[0, len(a)]。所以a[:]的值为[1, 3, 9, 3, 5, 6, -1],即和原列表一样。

a = [1, 3, 9, 3, 5, 6, -1]
a[:]	#[1, 3, 9, 3, 5, 6, -1]

三、关于第三位参数怎么理解,这里是令很多初学者疑惑的地方。
首先来看一下切片表达式:

list[start: end: step]

start:切片的初始位置,可正可负。
end:切片的结束位置(不包含),可正可负。
step:切片的步长,当步长为正数时,其切片方向是正向;当步长为负数时,其切片反向的反向的。
①当step=2时,跳2步正向取值:

a = [1, 3, 9, 3, 5, 6, -1]
a[2:6:2]	#[9, 5]

②当step=-2时,跳2步反向取值:

a = [1, 3, 9, 3, 5, 6, -1]
a[6:2:-2]	#[-1, 5]

想问一道经典python面试题,如果要将a="abcde"反转,你会怎么反转?
当然python用于字符串反转的方法很多,其中最简单的就是利用列表的切片进行反转了。

a = "abcde"
a[::-1]		#edcba

还有一个很值得深思的问题:b = a[:]是浅拷贝还是深拷贝呢,即切片后赋值是浅拷贝还是深拷贝呢?这个下次再聊(赋值、浅拷贝和深拷贝的区别)。

参考地址:
https://www.jianshu.com/p/15715d6f4dad

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值