Python中切片详细讲解

1、Python中切片的索引方式分为两种:

  1. 正索引
  2. 负索引
    Python切片索引方式

2、切片操作的表达方式

object[start_index:end_index:step]

step:可以表示切片的步长,当为1时表示顺序存取。步长的正负可以表示取值的方向。当为正时,表示从左向右取值,当为负数时,表示从右向左取值。
start_index:表示起始索引(包含索引本身),可以确定切片的起始位置,当为空时,表示取到端点位置,具体是“起始端点”还是“结束端点”要看step的值,当为正时,表示左边为起始端点,从左向右取;当为负数时,表示右边为起始端点,从右向左取。
end_index:表示终止索引(不包含索引本身),可以确定索引的结束为止。当为空时表示取到“终点”,具体终点是在左边还是右边,要看step的值是正数还是负数。

3、切片操作详解

以列表a =[0,1,2,3,4,5,6,7,8,9]为例

>>>a=[0,1,2,3,4,5,6,7,8,9]

3.1· 取单个值

>>>a[5]
>>>5
>>>a[-4]
>>>6

3.2· 切取整个值

>>>a[:]#从左往右切取整个对象,此处的step = 1是省略的
>>>[0,1,2,3,4,5,6,7,8,9]
>>>a[::-1]#step的值控制输出的方向,负数为从右向左
>>>[9,8,7,6,5,4,3,2,1]

3.3·start_index 和end_index都是正(+)的情况

>>>a[1:6:1]
>>>[1,2,3,4,5]
step为1,默认从左往右开始取值,start位置为0,end位置为5,step方向和索引方向一致,输出[1,2,3,4,5]
>>>a[1;6:-1]
>>>[]
step为-1,默认从右往左开始取值,start位置为1,end位置为6,step方向和索引方向不一致,故输出[]
>>>a[6:1]
>>>[]
step默认为正数1,从左往右取值,start位置为6,end位置为1,step方向与索引方向不一致,故输出[]

>>>a[:6:-1]
>>>[9,8,7]
step为负数1,end位置为6,start位置默认从右往左开始
>>>a[6:]
>>>[6,7,8,9]
step默认值正数1,start位置6,end位置默认到结尾
>>>>a[:6]
>>>[0,1,2,3,4,5]
step默认值为1,end位置为6,start位置默认从最左边开始
>>>a[6::-1]
>>>[6,5,4,3,2,1]
step的值为负数1,start位置为6,从start位置从右往左开始,end为空,默认到端点

3.4·start_index和end_index都是负数(-)的情况

>>>a[-1:-6]
>>>[]
step的值默认正数1,规定取值方向为从左往右
start=-1,end=-6-1——>-6方向从右往左,两者矛盾,为空(可参考上图)
>>>a[-1:-6:-1]
>>>[9,8,7,6,5]
step=-1,方向为从右向左,
start=-1,end = -6,方向为从右向左,两者一致(可参考上图)
>>>a[-6:-1]
>>>[4,5,6,7,8]
step默认为正数,方向从左向右
start = -6,end = -1,方向也是从左向右,两者一致(可参考上图)
>>>a[-6:]
>>>[4,5,6,7,8,9]
step默认正数,方向从左往右
start = -6,end默认到端点,方向从左向右,两者一致(可参考上图)
>>>a[-6::-1]
>>>[4,3,2,1,0]
step负数1方向从右向左
start =-6,end默认到终点(此时的终点是从右往左的终点),输出
>>>a[:-6]
>>>[0,1,2,3]
step为正数,方向从左向右
start默认到端点,end=-6,方向从左向右
>>>a[:-6:-1]
>>>[9,8,7,6,5]

3.5·start_index(+)和end_index是(-)的情况

>>>a[1:-6]
>>>[1,2,3]
step默认为正数,方向从左往右
start=1,end=-6(即end = 4),方向从左往右
>>>a[1:-6:-1]
>>>[]
step为负数,方向从右向左
start =1,end = -6,方向从左向右,与step方向冲突,故为空集
>>>a[3:-9]
>>>[]
空集
>>>a[3:-9:-1]
>>>[3,2]
setp方向与start-->end方向一致

3.6 ·start_index(-)和end_index是(+)的情况

>>>a[-1:2]
>>>[]
方向不同,解释参考前面的内容
>>>a[-1:2:-1]
>>>[9,8,7,6,5,4,3]

3.7·连续切片操作

>>>a[3:9][1:3][1]
>>>a[3:9]=[3,4,5,6,7,8]
>>>a[3:9][1:2]=[4.5]
>>>a[3:9][1:2][1] = [5]

3.8切片操作的参数可以使用表达式

a[1+2:5:7%2]=a[3:5:1]
这两种方法起到的效果是一样的

3.9进行插入操作

>>>a[3:6]='guo'
[0,1,2,'g','u','o',6,7,8,9]
>>>a[3:5]='guo'
>[0,1,2,'g','u','o',5,6,7,8,9]
>>>a[3:]='guo'
>[0,1,2,3,'g','u','o']
>>>a[:3]='guo'
>['g','u','o',3,4,5,6,7,8,9]

插入里面的限定,其实都是可以用前面的step和end的思想来解决

  1. 如果限定了长度,那么就“挤一挤”
  2. 如果没有限定长度,那就直接抹掉后面的部分,或者前面的部分,将剩余的部分直接“拿下来即可”

3.10其他数据类型的切片操作

元组的切片操作

(0,1,2,3,4,5,6,7)[:3]=(0,1,2)

字符串的切片操作

‘woaiwodezuguo’[3:]=‘iwodezuguo’

4·使用切片也可以方便的截取偶数位置、奇数位置,总之是非常方便的

  • 34
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值