切片的语法表达式为:[start_index : end_index : step]
,其中:
start_index
表示起始索引end_index
表示结束索引step
表示步长,步长不能为0,且默认值为1
切片操作是指按照步长,截取从起始索引到结束索引,但不包含结束索引(也就是结束索引减1)的所有元素。
python3
支持切片操作的数据类型有list
、tuple
、string
、unicode
、range
- 切片返回的结果类型与原对象类型一致
- 切片不会改变原对象,而是重新生成了一个新的对象
>>> m = list(range(100))# 通过range函数创建一个0-99的数列,组成一个list赋值给m
>>> m[:10]#取前十个数
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> m[-10:]#取后十个数
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> m[10:20]#取前11-20个数
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> m[:10:2]#前十个数中,每2个数取一个
[0, 2, 4, 6, 8]
>>> m[5:15:3]#第6-15个数中,每3个数取一个
[5, 8, 11, 14]
>>> m[::10]#所有的数中,每10个数取一个
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> m[:]#什么都不写,可以原样复制一个list
[0, 1, 2, 3, 4, 5, 6, 7,……,99]
num2 = [1, 2, 3, 4, 5, ["a", "b", "c", ["d", "e"]]]
print(num2[3:6]) # 这个切片表示获取从第三个元素到第六个元素的值,当前列表中只有5个元素,由于切片的性质顾头不顾尾,所以要取的最后一个值,就必须是6
>>>[4, 5, ['a', 'b', 'c', ['d', 'e']]]
summary:
1. 省略start_index
,保留end_index
,这样会从第一个元素开始,切到end_index - 1
的元素为止
ex: C = ['A','B','C','D','E','F']
>>> C[:5]
['A', 'B', 'C', 'D', 'E']
2. 保留start_index
,但省略end_index
,这样会从起始索引开始,切到最后一个元素为止
>>> C[2:]
['C', 'D', 'E', 'F']
3. 省略start_index
、end_index
和step
,这样就表示就表示切片整个序列,也就是复制出了一个新的序列
>>> C[:]
['A', 'B', 'C', 'D', 'E', 'F']
4. 省略start_index
、end_index
,但保留step
,表示对整个序列,按照步长整除的规则取值
>>> C[::2]
['A', 'C', 'E']
5. 此时,如果我们将步长设为-1
,那么就可以得到一个反序的序列:
>>> C[::-1]
['F', 'E', 'D', 'C', 'B', 'A']