因爲時常用到切片,但是有的時候總是不會逆向返回,或者倒着輸出等,所以做下總結。
切片格式:[start:end:step] 三個位置的都可以省略,step默認爲1。
a = [1,2,3,4,5]
print(a[1:]) # [2,3,4,5]
print(a[:]) # [1,2,3,4,5] (start,end) step 默認
print(a[::]) # [1,2,3,4,5] (start,end,step)均取默認值
print(a[::-1]) # [5,4,3,2,1] step=-1,從-1的位置開始,每次加-1輸出全部
print(a[-1:-3:-1]) # [5,4] end=-3,取不到所以是 [-1,-2]位置的輸出
print(a[-1:-3]) # [] staet = -1 從右取值,step=1,從左開始取值,左右矛盾
# 未指定正確的索引
print(a[-1:]) # [5] 因爲-1是最後一個元素,應該是從最後一個開始取
# 但step=1,所以只返回了[5]
print(a[-1]) # 5 注意兩者不同
print(a[1:-2]) # [2,3] 按照正序從index=1的位置開始切片,到index=-3的位置
# 上面的這個可以看成前後分別切片組合,到end的前一個是-3 而不是-1
在切片中從左往右是默認的,即step=1。當未指定開始位置時,從端點處開始。從左向右時,index=0。從右向左時,index=-1 or index = klen(list)-1。當start和end 與 step左右不相互矛盾時,返回正確切片,否則返回空列表。
N*N 維度 (list其實沒有這麼說的,把它想成矩陣)
a = [[1,2,3,4,5],[6,7,8,9,0],[1,1,1,1,1]]
print(a[1:]) # [[6,7,8,9,0],[1,1,1,1,1]]
print(a[:]) # [[1,2,3,4,5],[6,7,8,9,0],[1,1,1,1,1]]
print(a[::]) # [[1,2,3,4,5],[6,7,8,9,0],[1,1,1,1,1]]
print(a[::-1]) # [[1,1,1,1,1],[6,7,8,9,0],[1,2,3,4,5]]
print(a[-1:-3:-1]) # [[1,1,1,1,1],[6,7,8,9,0]]
print(a[-1:]) # []
print(a[-1]) # [1,1,1,1,1]
print(a[0:-1]) # [[1,2,3,4,5],[6,7,8,9,0]]
從上面例子可以看出,N*N維度的切片操作和1*N維度的效果是相同的,在N*N維度中,僅是將[ [list_1],[list_2],....,[list_N]]中的每個[list1]、[list2]、[list3]看作是一個1*N中的元素。當list中不在是list,而是其他結構如元組等,也是將一個元組當成一個整體做切片考慮。
寫完發現一篇寫的很好的博客(看不懂我的例子,可以看下面博客,比我寫的好):