python 切片操作 slice

原文参考:https://www.jianshu.com/p/15715d6f4dad

原文讲的非常清楚,很精彩。

格式:    字符串[start,end,step]      左开右闭         索引左边从0开始,右边从-1开始。

[:]   从开头  (默认位置0)   到结尾   (默认位置-1)   的整个字符串。

 [start:]  从start 提取到结尾

 [:end]  从开头提取到end - 1     

 [start:end]  从start 提取到end - 1

 [start:end:step] 从start 提取到end - 1,每step 个字符提取一个

 左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1




 

列表切片:

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”。




原文地址:https://www.cnblogs.com/yoyoma0355/p/12456758.html