语法:object[start:end:step]
start:指 切片的起始位置,如果没有值的话从头开始。 end :指切片的结束位置,但是不包含 end (前闭后开),如果没有值的话表示切割到结束为止。 step :表步长,步长的取值可为正数也可为负数,其绝对值大小决定了切取数据时的“步长”,而正负号决定了“切取方向”,如果为正数,表示从左往右,如果为负数,表示从右往左。当step省略时,默认为1,即从左往右以增量1取值。 切取方向非常重要!示例1:
#slice.py numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(“numbers:”,numbers) print(“numbers[ 3 : 9 ]:”,numbers[ 3 : 9 ] print(“numbers[ 3 : ]:”,numbers[ 3 : ] print(“numbers[ : 9 ]:”,numbers[ : 9 ] print(“numbers[ -6 : -1 ]:”,numbers[ -6 : -1 ] print(“numbers[ 1 : 9 : 2 ]:”,numbers[ 1 : 9 : 2 ] print(“numbers[ -1 : 1 : -2 ]:”,numbers[ -1 : 1 : -2 ]
输出结果:
numbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] numbers[ 3 : 9 ]: [3, 4, 5, 6, 7, 8] numbers[ 3 : ]: [3, 4, 5, 6, 7, 8, 9] numbers[ : 9 ]: [0, 1, 2, 3, 4, 5, 6, 7, 8] numbers[ -6 : -1 ]: [4, 5, 6, 7, 8] numbers[ 1 : 9 : 2 ]: [1, 3, 5, 7] numbers[ -1 : 1 : -2 ]: [9, 7, 5, 3]
分析:
第一行代码定义了一个名为 numbers 的列表;
第二行代码表示直接输出 numbers 列表;
第三行代码运用到切片 [ 3 : 9 ] ,表示从下标 3 开始复制元素 直到下标 8 (9-1) 停止复制;
第四行代码运用到切片 [ 3 : ] ,等价于 numbers[ 3 : 10 ] ,表示从下标 3 开始复制元素 直到末尾 即下标 9 当终止下标未给定时取得到最后一个元素;
第五行代码运用到切片 [ : 9 ] ,等价于 numbers[ 0 : 9 ] 从下标 0 开始复制元素 直到下标 8 (9-1);
第六行代码运用到切片 [ -6 : -1 ] ,这里的切片等价于 numbers[ 4 : 9 ] *当下标为负数时python解释器会自动将负数下标转化为正数下标 我们可以根据 len (numbers) - 6 = 4 len (numbers) - 1 = 9 将其转换为正数下标;
第七行代码运用到切片 [ 1 : 9 : 2 ] ,表示从下标 1 开始复制元素 没复制 1 个元素,下标 +2 直到下标达到或者超过 8 (9-1) 这仍取不到 9 ; 第六行代码运用到切片 [ -1 : 1 : -2 ] ,表示从下标 len (numbers) -1,即下标 9 开始复制元素 (步长为 -2)每复制 1 个元素,下标 -2 直到下标 达到 2 或者小于2停止 这 仍取不到1 因为前者为负,则从右往左取 即 [ 9, 7, 5, 3 ]。 示例2: a = [0,1,2,3,4,5,6,7,8,9] 1. 切割单个值>>> a = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [ 0 ] 0 >>> a [ 4 ] 4
2. 切割完整对象
>>> a [:] [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [::] [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [:: - 1 ] [ 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 ]
3. start和end全部取正数的情况
>>> a [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [ 1 : 6 ] [ 1 , 2 , 3 , 4 , 5 ] >>> a [ 1 : 6 : - 1 ] [] >>> a [ 6 : 1 : - 1 ] [ 6 , 5 , 4 , 3 , 2 ] >>> a [: 6 ] [ 0 , 1 , 2 , 3 , 4 , 5 ] >>> a [: 6 : - 1 ] [ 9 , 8 , 7 ] >>> a [ 6 :] [ 6 , 7 , 8 , 9 ] >>> a [ 6 :: - 1 ] [ 6 , 5 , 4 , 3 , 2 , 1 , 0 ]
4. start和end全部取负数的情况
>>> a [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [: - 6 ] [ 0 , 1 , 2 , 3 ] >>> a [ - 1 : - 6 ] [] >>> a [ - 1 : - 6 : - 1 ] [ 9 , 8 , 7 , 6 , 5 ] >>> a [ - 6 : - 1 ] [ 4 , 5 , 6 , 7 , 8 ] >>> a [: - 6 : - 1 ] [ 9 , 8 , 7 , 6 , 5 ] >>> a [ - 6 :] [ 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [ - 6 :: - 1 ] [ 4 , 3 , 2 , 1 , 0 ]
5. start和end正负混合情况
>>> a [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [ 1 : - 6 ] [ 1 , 2 , 3 ] >>> a [ 1 : - 6 : - 1 ] [] >>> a [ - 1 : 6 ] [] >>> a [ - 1 : 6 : - 1 ] [ 9 , 8 , 7 ]
6. 连续的切片操作
>>> a [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [: 8 ][ 2 : 5 ][ - 1 :] [ 4 ] a [: 8 ] ---- [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ][ 2 : 5 ] ---- [ 2 , 3 , 4 ] [ 2 , 3 , 4 ][ - 1 :] ---- [ 4 ]
7. 切片中的三个参数为表达式
>>> a [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] >>> a [ 1 + 2 : 2 * 3 : 7 % 2 ] [ 3 , 4 , 58. 切片可以操作其他的对象
>>> t = ( 1 , 2 , 3 , 4 , 5 ) >>> t [ 1 : 3 ] ( 2 , 3 ) >>> s = "ACDRF" >>> s [ 1 : 3 ] 'CD' >>> for i in range ( 0 , 100 ): ... print ( i ) ... >>> for i in range ( 0 , 100 )[ 2 :: 3 ][ - 10 :]: ... print ( i ) ... 71 74 77 80 83 86 89 92 95 98总结: 1. 如果进行切片操作的时候,超出下标不会报错 2. 如果切片操作的时候方向相互矛盾的话,不会报错,返回的空 3. 在 python 中进行反向输出列表 第一种:循环 第二种: [::-1] 第三种: reverse()



