切片
切片(slice)是取部分元素的操作。
列表list,字典dic,字符串,元组均可进行切片操作。
提取单个元素时,返回结果的类型为该元素的类型;切片返回值类型为列表。
索引方式
索引具有方向性,包括正索引和负索引,以list对象a=[0,1,2,3,4,5,6,7,8,9]为例:
从左向右索引为0,1,2,3,4,5,6,7,8,9
从右向左索引为-1,-2,-3,-4,-5,-6,-7,-8,-9,-10
操作方式
切⽚操作基本表达式:object[start_index:end_index:step]
,当只有一个:
时,默认第三个参数step=1
。
step
:正负数均可,绝对值决定了切取数据时的步长,正负号决定了切取方向,正表示从左往右取值,负表示从右往左取值。
start_index
: 表示起始索引(包含该索引对应值),该参数省略时,表示从对象“端点”开始取值,至于是起点还是终点开始,取决于step的正负。
end_index
: 表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据”端点“,至于是起点还是终点,取决于step的正负。
切取单个元素
a=[0,1,2,3,4,5,6,7,8,9]
a[2] #切取单个元素
2
a[-3] #倒序切取单个元素
7
切取完整对象
a=[0,1,2,3,4,5,6,7,8,9]
a[:] #从左往右全部切取
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[::-1] #从右往左全部切取
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
切取方向
取值方向由三个参数共同决定,起始索引到终止索引的方向与step所表示的取值方向需一致,不可矛盾,若矛盾输出为空列表。
a=[0,1,2,3,4,5,6,7,8,9]
a[1:6] #从索引为1的元素取到索引为6的元素前一个元素,起始索引到终止索引方向为从左至右,步长1为正数,方向也为从左至右
[1, 2, 3, 4, 5]
a=[0,1,2,3,4,5,6,7,8,9]
a[1:6:-1] #起始索引到终止索引方向为从左至右,步长-1为负数,方向为从右至左,矛盾,故输出结果为空列表。
[]
a=[0,1,2,3,4,5,6,7,8,9]
a[-1:-4:1] #起始索引到终止索引方向为从右至左,步长1为正数,方向为从左至右,矛盾,故输出结果为空列表。
[]
a=[0,1,2,3,4,5,6,7,8,9]
a[-1:-4:-1] #起始索引到终止索引方向为从右至左,步长-1为负数,方向为从右至左,一致。
[9, 8, 7]
多层切片
切片得到的结果还可以进行切片,只要上一次返回的是非空切片对象。
a=[0,1,2,3,4,5,6,7,8,9]
a[1:7][2:3]
[3]
切片常用操作
a=[0,1,2,3,4,5,6,7,8,9]
# 修改单个元素,直接赋值
a[2]='apple'
a
[0, 1, 'apple', 3, 4, 5, 6, 7, 8, 9]
# 在某个位置插入元素
a[2:2]=['a','b','c'] #在索引为2的位置插入元素
a
[0, 1, 'a', 'b', 'c', 'apple', 3, 4, 5, 6, 7, 8, 9]
#替换一部分元素
a[:2]=[10,11]
a
[10, 11, 'a', 'b', 'c', 'apple', 3, 4, 5, 6, 7, 8, 9]
# 复制整个列表
a=[0,1,2,3,4,5,6,7,8,9]
b=a[:]
b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a.append(20)
print(a)
print(b) #以切片方式复制列表,当a列表发生变化时,b列表不会相应变化
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 如果是赋值,则b列表会跟着变化。
a=[0,1,2,3,4,5,6,7,8,9]
b=a
b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a.append(20)
print(a)
print(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20]