列表切片:

list [start_index, end_index, step]  step可正可负,为正时表示从左往右取,为负时表示从右往左取


步长-1:表示从右往左取,开始1,结束3,表示从左往右取,两个互相矛盾,所以结果为空。


当end_index大于列表总长度时,可以正 确取值,取到结尾处。

当start_index为6,end_index为3时,取不到值是因为step默认为1,即从左往右取,而6:3是从右往左取。


这样将step写为-1时,就可以取到了。


此时step默认为1,即从左往右取,-6:-1也是从左往右取的意思。所以可以取到。


此时step默认为1,即从左往右取,end_indx没有时默认是取到终点,从左往右取的终点就是最右边。


step为-1,表示从右往左取,end_index没有默认为取到终点,此时的终点是最左边。

切片操作:

1。 切取单个元素

2。切取完整对象

3。start_index和end_index全为正索引(+)的情况

4。start_index和end_index全为负索引(-)的情况。

5。start_indx和end_index正(+)负(-)混合索引的情况

6。多层切片操作

7。切片操作的三个参数可以用表达式

8。切片操作的对象可以是列表、字符串,元组等可迭代的对象。

9。常用切片:取偶数位置,取奇数位置,修改单个元素,在某个位置插入元素,替换一部分元素

五、 总结

(一)start_index、end_index、step三者可同为正、同为负,或正负混合。但必须遵循一个原则,即:当start_index表示的实际位置在end_index的左边时,从左往右取值,此时step必须是正数(同样表示从左往右);当start_index表示的实际位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须相同。

(二)当start_index或end_index省略时,取值的起始索引和终止索引由step的正负来决定,这种情况不会有取值方向矛盾(即不会返回空列表[]),但正和负取到的结果顺序是相反的,因为一个向左一个向右。

(三)step的正负是必须要考虑的,尤其是当step省略时。比如a[-1:],很容易就误认为是从“终点”开始一直取到“起点”,即a[-1:]= [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],但实际上a[-1:]=[9](注意不是9),原因在于step省略时step=1表示从左往右取值,而起始索引start_index=-1本身就是对象的最右边元素了,再往右已经没数据了,因此结果只含有9一个元素。

(四)需要注意:“取单个元素(不带“:”)”时,返回的是对象的某个元素,其类型由元素本身的类型决定,而与母对象无关,如上面的a[0]=0、a[-4]=6,元素0和6都是“数值型”,而母对象a却是“list”型;“取连续切片(带“:”)”时,返回结果的类型与母对象相同,哪怕切取的连续切片只包含一个元素,如上面的a[-1:]=[9],返回的是一个只包含元素“9”的list,而非数值型“9”。