python切片对象和序列的切片
python切片对象和序列的切片
1.slice()函数
首先说明的是,slice函数或者方法是python中的built-in函数之一。这个方法的返回值是slice对象。具体的使用格式是:
slice([start,] stop [,step])
参数说明:
(1)这三个参数为整数,浮点数试了一下不会报错,但是好像没有什么意义,因为主要是结合序列的切片使用的。当然可以是0和负数。
(2)其中,start和step都是可以省略的。但是如果想要step不省略,那么start必须要加上。否则会认为只有start和stop。start省略情况下,会默认从0开始(在序列的切片时)。
(3)start和stop是左闭右开的。所以要注意!
返回值说明:
返回的是一个slice类型的对象。这个对象主要用于序列的切片。
>>> a = slice(19)
>>> type(a)
<class 'slice'>
2.序列的切片与slice()函数
2.1序列的介绍
python中的序列主要有字符串,列表,元组,字典,集合等等。对于序列,我们可以分为有序序列和无序序列。
有序序列:字符串,列表,元组。
无序序列:字典,集合。
为什么要进行分类呢?这是因为我们这里讨论的切片问题,能够进行切片的必须要求是有序序列。无序序列是不能够进行切片的。所谓的切片就是截取序列中的一个部分而已。
2.2 序列的切片的本质
序列的切片的本质就是调用了slice函数,应用了slice对象,来获取序列的全部或者一部分。
2.3 序列切片的两种方法
(1)有序序列[[start] : [stop] [: [step] ]
参数说明:
1)start 可以省略,默认是0;stop可以省略,省略则是提取到无穷远处。step可以省略,省略表示步长为1。
2)两个:表示间隔,用来确定这是在进行切片,并且确定位置用的。因此至少应该出现一个:,而第二个:是可以省略的。
3)start,stop和step都可以是负数。负数的本质意义就是表示方向!
比如start为负数,表明序列的方向是从右到左。右边的第一个也就是从左边的最后一个,索引号为标为-1。那么为什么左边第一个索引号是0,而右边第一个不能是?原因很简单,0被占用了啊!只能从-1开始算了。以此类推,右边第二个就是-2,第三个就是-3了。
stop为负数的时候,意义和start是一样的。
对于step为负数的理解。不用管方向了。反正就是要提取的下一个成员就是start+step就是了!
比如:
>>> list_1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list_1[6:3:-2]
[6, 4]
上面的例子,首先我们只管知道start和stop是正数,就知道对应于在list_1的具体位置,就确定了一个范围!然后,具体的步骤是,首先取索引为6这个数就是6,然后下一步是索引值变为6+(-2)=4,发现索引4在这个范围之内,取值为4,然后计算机继续执行,4+(-2)=2,这个索引不在这个范围,结束!
所以,再进行总结一下就是:start和stop确定一个范围,然后执行start+step,判断是否在范围内,如果是则取值,如果不是则结束。
4)这里写一个程序,模拟python进行切片的步骤:
step1:start定头,stop定尾;(不管start和stop是否省略,是正还是负,按照规则,肯定可以定一个范围的)
step2:判断step的挪动方向是否指向stop,如果不是返回空序列;如果不是执行step3
step3: 返回apend 序列[start];
step4: start+step,判断结果是否在这个范围内,如果不是则结束循环。如果是,则返回append 序列[start+step]。继续执行step4
pass(后面再补上来吧)
(2)调用切片函数
格式是:序列[slice([start,] stop [,step])]
具体的参数和前面说的是一样的。
浙公网安备 33010602011771号