切片的语法表达式为:[start_index : end_index : step]
start_index表示起始索引,end_index表示结束索引,step表示步长,步长不能为0,且默认值为1
切片操作是指按照步长,截取从起始索引到结束索引,但不包含结束索引(也就是结束索引减1)的所有元素。
python也提供slice函数实现切片对象,主要用在切片操作函数里的参数传递:[slice(start, stop, step)]
切片不会改变原对象,而是重新生成了一个新的对象
1 >>> C = [\'A\',\'B\',\'C\',\'D\',\'E\',\'F\'] 2 >>> C[0:4:1] # list的切片 3 [\'A\', \'B\', \'C\', \'D\'] 4 >>> C[slice(1,4,1)] # 切片函数slice() 5 [\'B\', \'C\', \'D\'] 6 >>> C = "ABCDEF" 7 >>> C[0:4:1] # str的切片(同list) 8 "ABCD" 9 >>> C[slice(1,5,2)] 10 "BD"
省略start_index,保留end_index,这样会从第一个元素开始,切到end_index - 1的元素为止
1 >>> C[:5] 2 [\'A\', \'B\', \'C\', \'D\', \'E\']
保留start_index,但省略end_index,这样会从起始索引开始,切到最后一个元素为止:
1 >>> C[2:] 2 [\'C\', \'D\', \'E\', \'F\']
省略start_index、end_index和step,这样就表示就表示切片整个序列,也就是复制出了一个新的序列:
1 >>> C[:] 2 [\'A\', \'B\', \'C\', \'D\', \'E\', \'F\']
省略start_index、end_index,但保留step,表示对整个序列,按照步长整除的规则取值:
1 >>> C[::2] 2 [\'A\', \'C\', \'E\']
此时,如果我们将步长设为-1,那么就可以很方便的得到一个反序的序列了:
1 >>> C[::-1] 2 [\'F\', \'E\', \'D\', \'C\', \'B\', \'A\']
只要起始值start_index到结束值end_index在step方向中间有值,就有返回值:
1 C = [\'A\',\'B\',\'C\',\'D\',\'E\',\'F\'] 2 # 下面这四种表达式是等价的: 3 >>> C[0:3] 4 [\'A\', \'B\', \'C\'] 5 >>> C[0:-3] 6 [\'A\', \'B\', \'C\'] 7 >>> C[-6:3] 8 [\'A\', \'B\', \'C\'] 9 >>> C[-6:-3] 10 [\'A\', \'B\', \'C\']
解释:c[0:-3]等价于c[A:D:1],c[-6:3]等价于c[0:3:1]
切片时,一定要保证start_index到end_index的方向与步长step的方向同向,否则会切出空的序列:
1 >>> C[0:3:-1] 2 [] 3 >>> C[3:0:1] 4 []