python
中切片是用来切割可迭代对象(容器)
一个完整的切片:
语法: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 , 5
8.
切片可以操作其他的对象
>>> 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 )...71747780838689929598
总结:
1.
如果进行切片操作的时候,超出下标不会报错
2.
如果切片操作的时候方向相互矛盾的话,不会报错,返回的空
3.
在
python
中进行反向输出列表
第一种:循环
第二种:
[::-1]
第三种:
reverse()