python切片逆序_Python 的逆序同时切片如何操作?

`Python` 的切片,语法是这样的

a[[start]:[end][:[step]]]

其中索引为 end 的元素不会被包括进来。`start`、`end`、`step` 和 `step 前面的冒号`都可以省略。这么多可以省略的,那么解释器是怎么设置默认值的呢?解释器对正序和逆序切片的默认值设置是不一样的。

变量 `a` 长这样:

a="0123456789"

## 正序切片

在正序切片中,默认值的设置为start = `0`

end = `-1 后面一位`,即切片会返回包括 str 最后一个元素

step = `1`

其中 `end` 的默认值为 `-1 后面一位`是什么意思呢?这里的 `-1` 指的是 `index` 为 `-1` 的元素,即 `str` 的最后一个位置,在 `a` 中指的是 `9` 这个元素。那它后面一位是无意义的,但解释器执行的时候会切片到该元素的前一位,即 `9`。

下面是几种正序切片的常见用例

a[:-1]

>>> '012345678'注意这里切片返回的结果不会包括索引为 -1 的元素

a[:8]

>>> '01234567'

a[8:]

>>> '89'

a[:8:2]

a[0:8:2]

>>> '0246'

## 逆序切片 (step 为负数)

逆序切片的默认值就很有意思了,不注意的话非常容易混淆搞错边界索引,它的默认值是start = `-1`

end = `0 前面一位`,即切片会返回包括 `str` 第一个元素

这里的逻辑是,从 `start` 元素开始,在其索引上依次加上 `step`,找到下一个索引直到 `end`,所以写逆序切片的时候,`start` 的索引是大于 `end` 的索引的。

a

>>> '0123456789'

a[::-1]

>>> '9876543210'

a[0::-1]

>>> '0'

a[:0:-1]

a[-1:0:-1]

>>> '987654321'

a[4::-1]

>>> '43210'

## 总结

其实不难反推出来,默认的值并不是写死的,而是根据 `step` 值来从 `start` 或者 `end` 二者之一来用加上 `step` 依次推导,直到队列最前/最后一个元素的。如果不熟悉的话,逆序切片很容易在边界上出错,也不直观,不易理解,最好使用其他等效的操作来替代。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值