持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
0 环境
- 编辑器:idea
- 系统版本:win10
- python版本:3.9.6
1 回顾切片
切片简写,分为[:索引]或者[索引:]、[:],为了方便,先假定一个列表,lists = [1,2,3],它的开头和结尾,begin代表最小索引值0,end代表最大索引值,我先定为最小边界和最大边界。然后切片的开始结束,[start:stop]。
- 当不超过索引范围时(start >= begin或stop <= end):[:]代表整个数组,[:stop] ==>
if(start doese not exist): [begin:stop],[start:] ==>if(stop doese not exist): [start:end] - 当
start >= stop,返回空列表 - 当超过索引范围时:
start超出索引范围:start=begin也就是置为0,当stop超出索引范畴stop=最大索引值,即stop=end。 - 当是负数索引时:它的转化过程:len(lists) + (负数索引)。
简化点看就是:上面列表的例子,它是有左右的索引边界的,最小最大索引值,类似高中数学里的知识,当你走超过最左边界,我们假设它无法表示超出的范围,那么就以最近原则为标准,取最左边界的索引值,当你往右走,超出了边界,还是最近原则取值。负数需要先长度 + 负数索引值,在判断。重点在于:就近原则。
2 step
继续上面那个列表,lists[start:stop:step],最后面加了个step,它的含义是啥呢,c语言的for循环,默认是i++,但是我的需求变了,我要i+2或者i+3等等,那么step就起到了这个作用。正常用的不多,知道即可。
3 小技巧
列表有倒序的方法,也可以用[::-1],它也可以实现列表倒序。
4 总结
在结合之前学的线性结构和切片,它们是很好用的,有enumerate方法,每次循环获取索引和元素。重点在迭代器,惰性求值,提升性能,而切片是获取一段元素,都是围着循环转,解决的点不同。