【Python之路】特别篇--Python切片
字符串切片操作
切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。
注意: 数是可选的,而冒号是必须的。
1 | consequence[start:end:step] |
切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数。
如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。
☛ (序列首与序列尾 依据step方向决定 !)
注意: 返回的序列从开始位置开始 ,刚好在结束位置之前结束。
即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。( 前闭后开 !)
- step为正,则从左到右切片,如果start > end 则为空
-
step为负,则从右到左切片,如果start < end 则为空
-
start 和 end 填空,前者表示最开始,后者表示最后一个,
-
同时为空的时候,表示取所有。至于方向,取决于step
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | >>> 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设定为缺省值(即第一个对象和最后一个对象)。
额外:
1 2 3 4 5 | >>> 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],分别表示序列的最后一个和第一个对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步