切片学习笔记

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. startend全部取正数的情况  

>>> 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. startend全部取负数的情况

>>> 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. startend正负混合情况

>>> 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 )
...
71
74
77
80
83
86
89
92
95
98

总结:

1. 如果进行切片操作的时候,超出下标不会报错
2. 如果切片操作的时候方向相互矛盾的话,不会报错,返回的空
3. python 中进行反向输出列表
第一种:循环 第二种: [::-1] 第三种: reverse()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值