乐趣区

关于前端:Python-切片操作

  1. 前言

在刚学 python 时候,咱们都晓得字符串(String)、列表(list)和元组(tuple)序列化数据类型反对切片操作。

slice operation TUPLE = (1,2,3,4) LIST = [1,2,3,4] STRING = “1234” print(“TUPLE[1:3]:”,TUPLE[1:3]) print(“LIST[1:3]:”,LIST[1:3]) print(“STRING[1:3]:”,STRING[1:3]) # output TUPLE[1:3]: (2, 3) LIST[1:3]: [2, 3] STRING[1:3]: 23 复制代码

通过上述例子,咱们能够疾速应用“区间”的形式截取到想要的数据。那么最初一位始终都没有取到?接下来,咱们对相熟的切片操作进行零碎学习。

  1. 什么是切片?

2.1 切片概述

Python 序列数据类型索引从左到右开始是从 0 开始,顺次加 +1;诺从右到左索引从 - 1 开始,顺次加 -1。

在 Python 中拜访子序列 / 字符串,应用方括号 [] 来截取指定的子序列 / 字符串。例如在列表中要元素 2 和 3,则切片截取为 LIST[1:3]

2.2 疏忽最初一位元素

在 Python 中,进行切片操作会不蕴含最初一位元素,这一格调是与 C 语言等语言保留以索引地位从 0 开始的做法。

切片疏忽最初一位元素会有以下益处:

当切片操作只给出最初一位时,能够间接明了看到截取的子序列的长度。例如 LIST[:2]中蕴含两个元素依据 Edsger W. Dijkstar 解释,索引地位从 0 开始比从 1 开始劣势,元素的序数(下标)等于序列中它之前的元素数。切片长度计算形式能够间接(stop-start)计算出同时,指定任何一个索引地位 x,能够对序列切割成不重叠的两个子序列 LIST[:x]和 LIST[x:]。>>> LIST = [1,2,3,4] >>> LIST[:2] # 间接能够晓得截取子序列为 2 [1, 2] >>> LIST[2:] # 将 LIST 在索引地位 2 处切片 [3, 4] >>> 复制代码

  1. 切片原理

切片操作是应用方括号 [] 进行运算的。其格局为 [start:stop:step]。对象在 start 和 stop 区间中取出距离 step 的元素。step 能够取正数。

LIST[1:4:2] [2, 4] >>> LIST[-1:-4:-1] [4, 3, 2] >>> LIST[::-1] [4, 3, 2, 1] >>> LIST[::-2] [4, 2] >>> 复制代码

start:stop:step 模式在方括号 [] 内,应用索引下标计算后,返回一个切片对象:slice(start,stop,step)

当序列进行 seq[start:stop:step]分片计算时,Python 会调用 seq.getitem(slice(start,stop,step))办法以元组的模式接管 [] 方括号索引。

查看 Python 内置 slice() 办法属性,有三个 start、stop 和 step 数据属性和 indices 办法

slice >>> dir(slice) [‘__class__’, ‘__delattr__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__le__’, ‘__lt__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘indices’, ‘start’, ‘step’, ‘stop’] >>> 复制代码

依据当序列调用 slice 办法后,会先执行 Seq.indices(len)办法计算出序列 Seq 从开始 start 和完结 stop 地位,步数 step。当超出边界时,会截掉。

slice(None,5,1).indices(2) #1 (0, 2, 1) >>> slice(-3,None,None).indices(2) #2 (0, 2, 1) >>> 复制代码

1 seq[:5:1] 等于 seq[0:2:1]

2 seq[-3:] 等于 seq[0:2:1]

切片其实还能够反对应用逗号离开多个索引,例如第三库 Numpy 库就是应用这个个性。

  1. 切片赋值

将序列进行切片操作后失去切片对象能够进行赋值,然而必须遵循以下条件:

切片做为对象,那么等号左边必须是一个可迭代的对象即便切片里只有一个值,也要转换成可迭代的序列否则的话,零碎会抛出 TypeError>>> LIST = [1,2,3,4,5] >>> LIST[1:4] = 23 Traceback (most recent call last): File “”, line 1, in TypeError: can only assign an iterable >>> 复制代码

  1. 切片计算

在 Python 中,切片对象能够进行“+”或“*”运算,以达到拼接组合成新的切片对象。

通过 “+” 连贯的是两个同类型序列,两个序列拼接后序列不会产生扭转,Python 外部会从新创立新的序列 >>> LIST = [1,2,3,4] >>> LIST2 = [5,6,7] >>> LIST + LIST2 [1, 2, 3, 4, 5, 6, 7] >>> s1 = “Jue” >>> s2 = “Jin” >>> s1 + s2 ‘JueJin’ 复制代码

通过“Seqn”, 能够将原数据类型复制 n 份,而后再拼接起来组合新的序列 >>> LIST = [1,2,3,4] >>> LIST 3 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] >>> s1 = “Jue” >>> s1 * 3 ‘JueJueJue’

退出移动版