@切片概念

python 中用于分割可迭代对象(包括列表、元祖、字符串等)

可能用到的知识点:


python篇 字典python篇 集合python篇 元组python篇 列表python篇 字符串


1.语法介绍

object[start_index:end_index:step]

名称

作用

start_index

切片起始位置 (如果缺省,则默认从头开始切割)

end_index

切片终止位置 (如果缺省,则默认到尾终止切割)

step

切片调用步长 (如果缺省,则默认为1,该值可为负)

例子:s[0,5,1]   取到的值为 s[0],s[1],s[2],s[3],s[4]

注意!start_index中所谓的从头开始切割并不是指从s[0]开始切割,其“头”的概念由step所界定,如s[::-1],这里就是从-1把-1作为头开始切割。

2.下标对应

以列表a[3,4,2,1,8]为例:

注意!
切割单个也叫切片

值  :  3  4  2  1  8
正标:  0  1  2  3  4
负标: -5 -4 -3 -2 -1

3.具体使用

3.1.end_index,start_index全为正情况

>>> s=[1,2,3,4,5,6,7,8,9]
>>> s[1:6]        	#注意下标取不到end_index值
[2, 3, 4, 5, 6]		#切片值为下标1~5
>>> s[1:6:-1]		#范围是1~6(不包含6),但步长为-1无论如何也取不到满足条件范围内的值,故为空
[]
>>> s[6:1]			#范围为6~1(不包含1),但步长为默认值,即1,故取不到范围内的值,为空
[]
>>> s[:6]			#start_index缺省,默认为0,step缺省,默认为1,故切片值为下标0~5
[1, 2, 3, 4, 5, 6]	
>>> s[:6:-1]		#start_index缺省,step为-1默认从“头开始”
[9, 8]
>>> s[6:]  #end_index缺省,默认到尾,step缺省,默认为1
[7, 8, 9]
>>> s[6::-1] #end_index缺省,默认到尾,步长为-1首尾逆转
[7, 6, 5, 4, 3, 2, 1]
>>>

3.2.end_index,start_index全为负情况

>>> s[-1:-6]   		 #step缺省,默认为-1,故无法取到任何值
[]
>>> s[-1:-6:-1]      #step为-1,取-1~-5
[9, 8, 7, 6, 5]
>>> s[-6:-1]         #step缺省,默认为1,取-6~-2
[4, 5, 6, 7, 8]
>>> s[-6:-1]
[4, 5, 6, 7, 8]
>>> s[:-6]			 #step默认为1,start_index缺省,因此取0,负标-6在此等价于4
[1, 2, 3]
>>> s[:-6:-1]        #start_index缺省,step为-1,故start_index取-1
[9, 8, 7, 6, 5]
>>> s[-6:]   		 #end_index缺省,step默认为1,故取-6~-1
[4, 5, 6, 7, 8, 9]
>>> s[-6::-1]        #end_index缺省,step为-1,故end_index取-9
[4, 3, 2, 1]
>>>

3.3end_index,start_index正负混合情况

>>> s[1:-6]       #step缺省,默认为1
[2, 3]
>>> s[1:-6:-1]    #step为-1,无法取到任何值
[]
>>> s[-1:6]
[]
>>> s[-1:6:-1]    #-1即是9,9~6
[9, 8]

3.4.连续切片

>>> s[:8][2:5][-1:]   先切0~8,再将结果切2~5,再将结果切-1
[5]

3.5.其他对象切片

>>> t=(1,2,3,4)      #切割元组
>>> t[1:3]
(2, 3)
>>> s="abcdsed"      #切割字符串
>>> s[::2]
'acsd'
>>> for i in range(0,100)[4:20][5:7]:    
...     print(i)
...
9
10
ff

3.6.单值切片

就按照单个下标进行操作

>>> s=[1,2,3,4,5]
>>> t=s[0]
>>> t
1
>>> type(t)
<class 'int'>

注意单值切片切出来的是变量
如:

>>> s=[1,2,3,4,5]
>>> t=s[0:1]
>>> t
[1]
>>> type(t)
<class 'list'>

不是单值切片

(小贴士:s[-1:] 等价为s[-1:-2:-1],s[8:]等价于s[8:9:1])

练习题:
1.a=[0,1,2,3,4,5,6,7,8,9],分别取偶数和奇数
2.倒序输出一个列表
3.当且切片选定下标超过迭代对象的下标范围会报错吗?