python切片详解_Python 切片语法详解

基础概念

Python的切片是特别常用的功能,主要用于对列表的元素取值。使用切片也会让你的代码显得特别Pythonic。

切片的主要声明如下,假设现在有一个list,命名为alist:

alist = [0,1,2,3,4]

复制代码

切片语法的基本形式为:

alist[start:stop:step]

复制代码

可以看出对于列表的切片操作有三个参数,分别为:

start:起始位置

stop:终止位置

step:步长

三个参数都是可选参数,意义为list的下标,即index。step参数默认值为1。表现形式有以下几种:

alist[start:stop]

alist[start:]

alist[:stop]

alist[:]

复制代码第一种方式指定了start与stop参数,从start指定的下标开始取alist的元素,直到stop-1,例如a[1:3]的结果为[1,2]。

第二种方式会从start指定的下标开始,取alist剩余元素。例如a[1:]会得到[1,2,3,4]。

第三种方式会从alist的开始,取list元素,直到下标为stop-1,例如a[:4]会得到结果[0,1,2,3]

第四种方式没有指定start与stop参数,则会返回整个列表。

需要注意的是,:stop表示不在选定切片中的第一个值,alist[start:stop]的取值类似于数学中的取值范围为[start, stop), 所以在步长默认为1的情况下,start-stop的结果即为所取元素的数量。

负值用法

start与stop参数为负值

start与stop的值可以是负值,表示取值是从list的最后开始,而不是开头。

例如:

alist[-1]

alist[-3:]

alist[:-1]

复制代码第一种写法表示取alist的最后一个值,输出为4。

第二种写法表示,从alist的倒数第三个值开始,取list剩下的元素,输出为[2,3,4]。

第三种写法表示,从alist的开始取list中的元素,直到下标为倒数第一个值,输出为[0,1,2,3]。

step参数为负值

step为负值时候表示将列表逆向,最简单的例子如下:

alist[::-1]

复制代码

输出结果为[4,3,2,1,0]。这个例子实际是以下面的这个形式返回,

[alist[-1], alist[-1-step], ..., alist[0]]

复制代码

即从倒数第一个元素开始,每一步加上步长,因为这里步长为负数,所以是减法,直到alist的开头。

知道这个原理,就能明白一些加上了start与stop参数的复杂写法,例如:

指定了start参数

alist[1::-1]

复制代码

实际上是这样返回:

[alist[1], alist[1-step], ..., alist[0]]

复制代码

因此,返回的是[1,0]

指定了stop参数

alist[:1:-1]

复制代码

实际上是这样返回:

[alist[-1], alist[-1-step], ..., alist[stop+1]]

复制代码

因此,返回的是[4, 3, 2]。

同时指定了start与stop参数

注意,由于是逆序,所以start参数应该大于stop参数。

alist[3:1:-1]

复制代码

实际上是这样返回:

[alist[start], alist[start-step], ..., alist[stop+1]]

复制代码

因此,返回的是[3,2]

我们可以看出,

如果指定了start参数,则从start参数index开始取元素,直到遇到stop下标或者list的第一个元素。

如果未指定start参数,则从list倒数第一个元素开始,直到遇到stop下标或者list的第一个元素。

总结

切片语法的使用特别灵活,如果正确掌握了它的用法,能够简化你的代码。需要注意的是,Python也提供了slice类用于制造切片,例如:

alist[start:stop:step]

复制代码

实际上等价于

alist[(slice(start,stop,step))]

复制代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值