因为时常用到切片,但是有的时候总是不会逆向返回,或者倒着输出等,所以做下总结。
切片格式:[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,而是其他结构如元组等,也是将一个元组当成一个整体做切片考虑。
写完发现一篇写的很好的博客(看不懂我的例子,可以看下面博客,比我写的好):