Python3的切片

Python3的切片非常灵活,可以很方便地对有序序列进行切片操作,代码简单易用。

大家都知道,我们可以直接使用索引来访问序列中的元素,同时索引可分为正向和负向两种,而切片也会用到索引,下面放上一个图,有助于大家理解正、负向索引的区别。

切片

切片的语法表达式为:[start_index : end_index : step],其中:

  • start_index表示起始索引
  • end_index表示结束索引
  • step表示步长,步长不能为0,且默认值为1

切片操作是指按照步长,截取从起始索引到结束索引,但不包含结束索引(也就是结束索引减1)的所有元素。

  • python3支持切片操作的数据类型有list、tuple、string、unicode、range
  • 切片返回的结果类型与原对象类型一致
  • 切片不会改变原对象,而是重新生成了一个新的对象

下面看例子,先看一个完整的例子:

>>> C = ['A','B','C','D','E','F']
>>> C[0:4:1]
['A', 'B', 'C', 'D']

  • 1
  • 2
  • 3

定义一个数组,包含'A','B','C','D','E','F'这6个元素,通过切片,按照步长为1,获取从索引0开始,到索引4结束但不包含索引4的所有元素,见下方示意图

省略step步长,因为步长有默认值为1,因此结果还是一样:

>>> C[0:4]
['A', 'B', 'C', 'D']

  • 1
  • 2

省略start_index,保留end_index,这样会从第一个元素开始,切到end_index - 1的元素为止:

>>> C[:5]
['A', 'B', 'C', 'D', 'E']

  • 1
  • 2

保留start_index,但省略end_index,这样会从起始索引开始,切到最后一个元素为止:

>>> C[2:]
['C', 'D', 'E', 'F']

  • 1
  • 2

省略start_index、end_index和step,这样就表示就表示切片整个序列,也就是复制出了一个新的序列:

>>> C[:]
['A', 'B', 'C', 'D', 'E', 'F']

  • 1
  • 2

省略start_index、end_index,但保留step,表示对整个序列,按照步长整除的规则取值:

>>> C[::2]
['A', 'C', 'E']

  • 1
  • 2

此时,如果我们将步长设为-1,那么就可以很方便的得到一个反序的序列了:

>>> C[::-1]
['F', 'E', 'D', 'C', 'B', 'A']

  • 1
  • 2

下面这四种表达式是等价的:

>>> C[0:3]
['A', 'B', 'C']
>>> C[0:-3]
['A', 'B', 'C']
>>> C[-6:3]
['A', 'B', 'C']
>>> C[-6:-3]
['A', 'B', 'C']

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

切片时,一定要保证start_index到end_index的方向与步长step的方向同向,否则会切出空的序列:

>>> C[0:3:-1]
[]
>>> C[3:0:1]
[]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值