切片(Slice)是一个取部分元素的操作。可以操作list、tuple、字符串。利用切片很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。切片在考试中肯定会出现。
通常一个切片操作要提供三个参数 [start_index: stop_index: step] :
start_index是切片的起始位置
stop_index是切片的结束位置(不包括)
step可以不提供,默认值是1,步长值不能为0,不然会报错ValueError。
首先先看几个栗子:
解析:这题是从序号1开始,到4结束,每次间隔的步长是2,list的切片中序号0开始,默认切片的起始位置的元素gold一定会被取到,然后间隔了2个步长,取到序号是3的元素brown。注意切片是顾头不顾尾的。
解析:这题是从序号4开始,切下去,直到末尾结束,因此结果是D
解析:此题切片的起始位置和结束位置都是空缺的,python中步进为正,从左往右取,步进为负,从右往左取,实现倒序。
解析:这题是从序号1开始,到10结束,每次间隔的步长是3,字符串的切片中序号0开始,默认切片的起始位置的元素b一定会被取到,然后间隔了3个步长,取到序号是3的元素e,再间隔3个步长取到h。最终结果是beh。注意切片是顾头不顾尾的。最后是一次间隔3个步长,从h到k,k是序号10,根据顾头不顾尾的原则,切片是不取最后一个k的。切记。
解析:切片的起始位置比结束位置还要大,是取不到值的。起始位置-5,是从右向左数5个步长,步长是1,即3,结束位置是从右向左数3个步长,即5,根据切片顾头不顾尾原则,结束位置只能取到4,结果未[3,4]
Python中符合切片并且常用的有:列表,字符串,元组。
下面那列表来说明,其他的也是一样的。
格式:[开头:结束:步长]
开头:当步长>0时,不写默认0。当步长<0时,不写默认-1
结束:当步长>0时,不写默认列表长度加一。当步长<0时,不写默认负的列表长度减一
步长:默认1,>0 是从左往右走,<0是从右往左走(▽)
例如:
>>>a_list = [1, 2, 3, 4, 5]>>>b_list = a_list[1:4]>>>b_list[2, 3, 4]
可以发现,开始b_list是从第二位开始的,因为列表的引索是从0开始,并且结束的引索是不包含的
可以理解为 切片的结果是 >= 开头 and < 结束
对于步长
>>>a_list = [1, 2, 3, 4, 5, 6, 7]>>>b_list = a_list[1:5:2]>>>b_list[2, 4]
因为a_list[1:5]的结果是[2, 3, 4, 5],又因为是步长为2所以取[2, 4]
如果要取全部的内容的话,开始和结束就不用填
如下
>>>a_list = [1, 2, 3, 4, 5, 6, 7]>>>b_list = a_list[:]>>>b_list[1, 2, 3, 4, 5, 6, 7]>>>b_list = a_list[::2]>>>b_list[1, 3, 5, 7]
现在来说一下当步长小于0的时候的情况
>>>a_list = [1, 2, 3, 4, 5, 6, 7]>>>b_list = a_list[-1:-8:-1]>>>b_list[7, 6, 5, 4, 3, 2, 1]>>>b_list = a_list[::-1][7, 6, 5, 4, 3, 2, 1]
结合上面步长>0的介绍,也就差不多理解了。