Python进阶5——切片

关于切片已经在Python知识点3——列表操作中简要介绍,切片是序列类型的一部分,不仅列表能切片,元组,字符串也能切片

切片会忽略区间的最后一个元素,也就是左闭右开

 

切片的一般形式是s[a:b:c],其中a是起始下标,b是终止下标,不包含,c是取值间隔,整体的意思就是对s做切片,从a开始,然后a的下标加c后,取对应下标的值,直到下标b为止(不包括b)

c可以为负值,如果负值表示反向,如果是-1就是倒序,-2就是从最后一个元素开始,下标每次-2取对应的值

 

c为负数的示例

a=list(range(1,20))
print(a)
print(a[::-3])#从后向前,每次下标减三取一次值,包括所有元素
print(a[10:1:-3])#从下标为10的元素开始,每次下标-3取一次值,不包括下标为1的元素

 

一般来说,c是大于0的,如果c为负数,那么a一定要大于b,否则输出的是空对象

print(a[1:10:-2])

 

切片函数slice

函数slice的作用就是将s[a:b:c]中的a:b:c用slice(a,b,c)替换,s[slice(a,b,c)]效果和s[a:b:c]完全一样

因为abc可变化,所以slice的参数有四种情况

 

1.slice(None)

print(a[slice(None)], a[::])

 

2.slice(b)

print(a[slice(4)], a[:4:])

 

3.slice(a,b)

print(a[slice(1,10)], a[1:10])

 

4.slice(a,b,c)

print(a[slice(1,16,3)], a[1:16:3])

 

操作切片

将切片作为左值,就可以对切片进行修改

 

举例

b=list(range(1,15))#生成一个列表
print(b)
print('-------------')
b[3:6]=[20,50]#将下标为3,4,5这三个元素组成的切片替换为[20,50]
print(b)
print('-------------')
del b[10:14]#删除切片[10:14],也就是删除下标为10,11,12,13的四个元素
print(b)
print('-------------')
b[2:9:2]=[10,20,30,40]#将切片替换为[10,20,30,40],也就是下标为2,4,6,8的四个元素替换为[10,20,30,40]
print(b)
print('-------------')
b[11:13]=[0]#将下标为11,12的两个元素组成的列表切片替换为[0]
print(b)

对于上面的b[2:9:2]=[10,20,30,40],中间的9可以忽略不写,写了有可能报错

b[2:9:2]=[10,20,30]

因为左值切片包含元素的下标为2468四个元素,而右值只有三个元素,所以切片元素的数目不匹配,报错

所以在对s[a:b:c]类型的切片赋值是,要注意切片元素的个数匹配

 

参考书籍:《流畅的Python》

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章