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])]

具体的参数和前面说的是一样的。

posted @ 2020-08-21 10:38  gj&sq  阅读(281)  评论(0)    收藏  举报