【Python之路】特别篇--Python切片
字符串切片操作
切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。
注意: 数是可选的,而冒号是必须的。
consequence[start:end:step]
切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数。
如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。
☛ (序列首与序列尾 依据step方向决定 !)
注意: 返回的序列从开始位置开始 ,刚好在结束位置之前结束。
即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。( 前闭后开 !)
- step为正,则从左到右切片,如果start > end 则为空
-
step为负,则从右到左切片,如果start < end 则为空
-
start 和 end 填空,前者表示最开始,后者表示最后一个,
-
同时为空的时候,表示取所有。至于方向,取决于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],分别表示序列的最后一个和第一个对象。