關於切片已經在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》
歡迎大家評論交流,作者水平有限,如有錯誤,歡迎指出