前言刚开始学习python的时候,我们都知道字符串(String)、列表(list)和元组(tuple)序列化数据类型都支持切片操作。切片操作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])#输出TUPLE[1:3]:(2,3)LIST[1:3]:[2,3]STRING[1:3]:23复制代码通过上面的例子,我们可以快速的使用“interval”的方法截取到想要的数据。所以最后一点从未被采取?接下来,我们系统地学习熟悉的切片操作。什么是切片?2.1切片概述Python序列数据类型的索引从0开始,从左到右依次加+1;从右到左的索引从-1开始,依次加上-1。要在Python中访问子序列/字符串,请使用方括号[]截取指定的子序列/字符串。例如,如果列表中需要元素2和3,则切片被截取为LIST[1:3]2.2忽略最后一个元素在Python中,切片操作中不会包含最后一个元素。这种风格类似于C等语言,保留了索引位置从0开始的做法。切片忽略最后一个元素,有以下优点:当切片操作只给出最后一位时,可以直接清晰的看到截获子序列的长度。例如,LIST[:2]包含两个元素。根据EdsgerW.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]>>>复制代码切片原理切片操作使用方括号[]进行。它的格式是[start:stop:step]。该对象在开始和停止间隔中提取间隔步骤的元素。步骤可以取负数。列表[1:4:2][2,4]>>>列表[-1:-4:-1][4,3,2]>>>列表[::-1][4,3,2,1]>>>LIST[::-2][4,2]>>>把代码start:stop:step复制成方括号[]的形式,使用索引下标计算后,返回一个slice对象:slice(start,stop,step)当sequence进行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']>>>根据when复制代码序列调用slice方法,会先执行Seq.indices(len)方法计算序列Seq的起止位置,以及步数step。当它超过边界时,它将被切断。slice(None,5,1).indices(2)#1(0,2,1)>>>slice(-3,None,None).indices(2)#2(0,2,1)>>>>复制代码1seq[:5:1]等于seq[0:2:1]2seq[-3:]等于seq[0:2:1]其实切片也可以支持多索引以逗号分隔,比如第一个三库的Numpy库就使用了这个特性。切片赋值切片对象可以对序列进行切片后赋值,但是必须满足以下条件:切片作为对象使用,那么等号右边必须是可迭代对象即使只有一个值slice,必须转为iterable否则系统会抛出TypeError>>>LIST=[1,2,3,4,5]>>>LIST[1:4]=23Traceback(mostrecentcalllast):File"",line1,inTypeError:Canonlyassignaniterable>>>复制代码切片计算在Python中,可以用"+"或"*"操作切片对象,实现拼接组合成新的切片目的。两个相同类型的序列用“+”连接。两个序列拼接后,序列不会改变,Python内部会重新创建一个新的序列>>>LIST=[1,2,3,4]>>>LIST2=[5,6,7]>>>LIST+LIST2[1,2,3,4,5,6,7]>>>s1="爵">>>s2="晋">>>s1+s2'爵晋'copycodeThrough"Seqn",可以复制n份原始数据类型,然后将它们拼接在一起,组成一个新的序列>>>LIST=[1,2,3,4]>>>LIST3[1,2,3,4,1,2,3,4,1,2,3,4]>>>s1="爵">>>s1*3'爵爵爵'
