Python数组list分片
参数解释
list[start:end:stride]
end的结束点是按切片的方向在下标为end的元素的前一个
如果stride>0,start<=结果<end(切片方向由左往右,end的元素的前一个即<end)
如果stride<0,end<结果<=start(切片方向由右往左,end的元素的前一个即>end)
start/end代表下标而不是第几个
对原列表进行切割之后,会产生另外一份全新的列表。系统依然维护着指向原列表中各个对象的引用。在切割后得到的新列表上进行修改,不会影响原列表
快速分片
样例:
[79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
79 | 3 | 56 | 97 | 65 | 29 | 86 | 93 | 45 | 45 |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
全部
a[:]/a[::]
a
Out[94]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[:]
Out[95]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[::]
Out[96]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
前面n个
a[:n]/a[:n:]
a
Out[88]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[:3]
Out[89]: [79, 3, 56]
a[:3:]
Out[90]: [79, 3, 56]
最后n个
a[-n:]/a[-n::]/a[len(a)-n]
a
Out[82]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[-4:]
Out[73]: [86, 93, 56, 45]
a[-4::]
Out[80]: [86, 93, 56, 45]
a[len(a)-4:]
Out[106]: [86, 93, 56, 45]
反转
a[::-1]
a
Out[82]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[::-1]
Out[81]: [45, 56, 93, 86, 29, 65, 97, 56, 3, 79]
除后面n个以外的元素
a[:-1]
a
Out[97]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[:-1]
Out[98]: [79, 3, 56, 97, 65, 29, 86, 93, 56]
从尾部开始,向前以固定间隔stride取值
a[::-stride]
a
Out[130]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[::-2]
Out[131]: [45, 93, 29, 97, 3]
分组切片
for i in range(0,len(lst),num):
print lst[i:i+num]
注意事项
元素越界
切割列表时,即便start或者end索引越界不会出现问题
a
Out[97]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[-11:]
Out[108]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[-11:20]
Out[109]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[-0:]
含义:原列表的一份拷贝
a
Out[97]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
b = a
a is b
Out[112]: True
b = a[-0:]
a is b
Out[114]: False
a[2:6]=[1, 2]
与元组的赋值不同(a, b = [5, 6]),切片的长度无需新值的个数相等。位于切片范围之前及之后的那些值都保留不变,列表会自动扩张或收缩
a
Out[115]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[2:6]=[1, 2]
a
Out[117]: [79, 3, 1, 2, 86, 93, 56, 45]
start比end早出现原则
在使用stride问题中,一定要遵守start比end早出现原则。
a
Out[142]: [79, 3, 56, 97, 65, 29, 86, 93, 56, 45]
a[10:0:2]
Out[143]: []
a[-3:-5:2]
Out[147]: []