python切片

定义

切片可以获取序列(列表,字符串......)的子序列,通俗来讲就是 复制,将指定元素复制放入新生成的子序列中,它是创建而非关联。

切片包括三个参数(start_index、end_index、step),即(起始下标,结束下标,步长)。

此处需要提醒的是,切片的范围是左闭右开例如num[3:9]是从下标3开始复制元素,直至下标8(9-1)

操作方法

切片的完整形式是:num[x:y:z],其中在,z为步长,x为起始下标,y为终止下标。 

python会自动为缺省参数赋以默认值。z缺省默认为1。当z>0,x缺省默认为0,包括最左端的元素,y缺省为len(num),包括最右端的元素,最右端的下标为len(num)-1。当z<0时,

切片的方向从右向左,起始下标x应为最右端的元素,故x缺省值为len(num)-1:终止下标则默认为-1.

1.切割单个元素

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

2.切割完整序列

(1)

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

(2)

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

 (3)倒序

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

 (4)当start和end都为正时

此时需要注意切片的默认切割顺序步长是否冲突,简单来说不设置步长 此时的默认切割顺序是从左至右,要求起始下标要比终止下标小,如果起始下标大于终止下标,而步长又不是 -1 ,此时就会发生错误,python解释器只会返回一个空的列表  举个例子

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

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

a[6:1:-1]
[6, 5, 4, 3, 2]

 (5)当start和end都为负时

a =  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[:-6]
[0, 1, 2, 3]  #此处默认z为1,即切割顺序从左至右,即从下标0到 (-6)-1

a[-1:-6]
[]   #此处默认z为1,即切割顺序从左至右,如果想要切割-1到-6,则需要从右至左切割,z应该为-1,所以此处返回了空列表

a[-1:-6:-1]
[9, 8, 7, 6, 5]

a[-6:-1]
[4, 5, 6, 7, 8]

 (6)当start和end正负混合时

此时需要特别注意切割顺序!

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

a[1:-6:-1]
[]  #z为-1,切割顺序是从右至左,而起始下标 1 的元素在终止下标 -6 元素的左边,即起始是1,终止是3,步长是-1,这是没办法做到的,需要从左至右,所以此处冲突,返回空列表

a[-1:6]
[]   #此处切割顺序是从左至右,而-1下标的元素是 9 ,6下标元素是5,即起始是9,终止是5,步长为1,无法做到,所以错误

 (7)连续切片操作

 

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]

 

总结:

(一)start_index、end_index、step三者可同为正、同为负,或正负混合。但必须遵循一个原则,否则无法正确切取到数据,即:当start_index的位置在end_index的左边时,表示从左往右取值,此时step必须是正数(同样表示从左往右);当start_index的位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须是相同的。对于特殊情况,当start_index或end_index省略时,起始索引和终止索引由step的正负来决定,这种情况不会有取值方向矛盾(即不会返回空列表[]),但正和负取到的结果顺序是相反的,因为一个向左一个向右。

(二)在利用切片时,step的正负是必须要考虑的,尤其是当step省略时。比如a[-1:],很容易就误认为是从“终点”开始一直取到“起点”,即a[-1:]= [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],但实际上a[-1:]=[9](注意不是9),原因在于step=1表示从左往右取值,而起始索引start_index=-1本身就是对象的最右边元素了,再往右已经没数据了。

(三)需要注意:“取单个元素(不带“:”)”时,返回的是对象的某个元素,其类型由元素本身的类型决定,而与母对象无关,如上面的a[0]=0、a[-4]=6,元素0和6都是“数值型”,而母对象a却是“list”型;“取连续切片(带“:”)”时,返回结果的类型与母对象相同,哪怕切取的连续切片只包含一个元素,如上面的a[-1:]=[9],返回的是一个只包含元素“9”的list,而非数值型“9”。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值