【Python之路】特别篇--Python切片 字符串切片操作 额外:

切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。

注意: 数是可选的,而冒号是必须的。

consequence[start:end:step]

切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数

如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。

☛ (序列首与序列尾 依据step方向决定 !)

 

注意: 返回的序列从开始位置开始 ,刚好在结束位置之前结束。

即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。( 前闭后开 !)

  • step为正,则从左到右切片,如果start > end 则为空
  • step为负,则从右到左切片,如果start < end 则为空

  • startend 填空,前者表示最开始,后者表示最后一个,

  • 同时为空的时候,表示取所有。至于方向,取决于step

 

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[::2]
[1, 3, 5, 7, 9]

>>> a[1:6:2]
[2, 4, 6]

>>> a[8:3:-1]  
[9, 8, 7, 6, 5]    # 右-》左切片,step 为1,a[8]=9, a[7]=8, ... a[4]=5, 8-3=5个

>>> a[10:0:-2]
[10, 8, 6, 4, 2]   # 右-》左切片, 切片的时候,不存在 index 越界情况

>>> a[0:10:-2]     # start < end , step 为负, 方向为右-》左,第一个是 a[0], a[0]的左边就再也没有值了。为空
[]

>>> a[::-2]        # a[:]表示取所有,step 为负就反方向
[10, 8, 6, 4, 2]

>>> a[5::-2]       # 右-》左,结果等价 a[5:0:-2] a[5]=6, a[3]=4, a[1]=2
[6, 4, 2]

>>> a[:5:-2]       # 右-》左, 等价于 a[9:5:-2] a[9]=10, a[7]=8 
[10, 8]

总结:

1. start 和 end 不填,或者其中一个不填,都是指代获取所有,然后根据 step 确定方向。

2. step:表示取值的步长,默认为1,步长值不能为0。

3. 因此任意一个序列结构数据的索引范围为 -len(consequence) 到 len(consequence)-1 范围内的连续整数。

4. 当使用冒号(:)对序列进行切片取值时,你所输入的无论是start_index或者end_index,都不必局限于 -len(consequence) 到 len(consequence)-1 之间因为只有当你输入的索引号处于这个区间时才真正有效,而当你输入的索引号超出这个范围时,python会自动将start_index或end_index设定为缺省值(即第一个对象和最后一个对象)。

额外:

>>> a=[1,2,3,4,5,6,7]   
>>> a[len(a)-1]   
7   
>>> a[-len(a)]   
1   

其中a[len(a)-1]等同于a[-1],a[-len(a)]等同于a[0],分别表示序列的最后一个和第一个对象。