所有切片列表的冒号表达式,实际上都由最基本的起始位:截止位:步幅
演变而来,只是有时候会省略一些内容,让整个表达式难以一眼理解。
基本表达式
首先需要理解完整的表达式:起始位:截止位:步幅
,其意思就是在左闭右开的区间[起始位,截止位)
中按照步幅
来对列表进行切片。结合下面的实例,这不难理解:
除此之外,Python还有非常特色的“负下标”,可以倒序访问整个列表,a[-x]
便表示列表a的倒数第x个元素:
同时,步幅也不一定为正数,可以用负数来倒序切片,也可以和负下标结合起来使用:
简化表达式
了解了最基本的两种表达,接下来就是对基本表达式起始位:截止位:步幅
的简化。
省略步幅
首先是对步幅的省略,这样表达式就只剩下起始位:截止位
,而步幅则默认为1:
省略起始位
如果省略第一个冒号之前的数字,则起始位默认从两端开始,步幅为正时默认从0位开始,步幅为负时默认从-1位开始:
这种省略还可以和省略步幅结合在一起:
省略截止位
截止位的省略与起始位大同小异,当步幅为正时,截止位默认为-1后一位;当步幅为负时,截止位默认为0位前一位。之所以与省略起始位有所不同,在于冒号表达式都是左闭右开的,如果将截止位设为0,是无法将第一个元素囊括在切片出的列表里的,这也是少数省略表达式能做而完整表达式做不到的地方。另外,前面的省略依旧可以与它结合: