备忘录:
Python中:字符串、列表、元组 都可以切片,切片操作使用方括号操作符:[ ]
语法:[start:stop:step]
start: 起始索引
stop: 终止索引
step: 间距(步幅)
1,切片操作返回一个新的对象,不会改变原对象。
2,start、stop:索引值,必须是整型数(must be integers),可正可负可缺省。当为负数时,会反向索引:如,-1 代表末尾元素的索引。当 start >= stop 时切片结果为空对象 ( 这里是比较的 start、stop 对应的索引,不是字面值 )。
3,step:间距(步幅),必须是非零整型数,不能为0(切记),可以缺省,缺省值是 1
4,切片操作的结果:前闭后开,包含start索引对应的元素,不包含stop索引对应的元素。
5,当step为负数时,返回一个倒序排列的结果(倒序排列+切片,一条龙服务),切记:不是先切片,后倒序。从结果上看:是先倒序,后切片。具体源码细节没研究...
几个小栗子加深理解:
#-*-encoding:utf-8-*-
#python 3.6
#s = "0123456789"
s = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
#s = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
print("01: s[:] >>>", s[:]) #01: s[:] >>> ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
print("02: s[::] >>>", s[::]) #02: s[::] >>> ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
print("03: s[::2] >>>", s[::2]) #03: s[::2] >>> ['0', '2', '4', '6', '8']
print("04: s[::-2] >>>", s[::-2]) #04: s[::-2] >>> ['9', '7', '5', '3', '1']
print("05: s[2::3] >>>", s[2::3]) #05: s[2::3] >>> ['2', '5', '8']
print("06: s[-2:] >>>", s[-2:]) #06: s[-2:] >>> ['8', '9']
print("07: s[:6] >>>", s[:6]) #07: s[:6] >>> ['0', '1', '2', '3', '4', '5']
print("08: s[:-4] >>>", s[:-4]) #08: s[:-4] >>> ['0', '1', '2', '3', '4', '5']
print("09: s[2:4] >>>", s[2:4]) #09: s[2:4] >>> ['2', '3']
print("10: s[-8:4] >>>", s[-8:4]) #10: s[-8:4] >>> ['2', '3']
print("11: s[2:-4] >>>", s[2:-4]) #11: s[2:-4] >>> ['2', '3', '4', '5']
print("12: s[-4:-2] >>>", s[-4:-2]) #12: s[-4:-2] >>> ['6', '7']
print("13: s[-2:-4] >>>", s[-2:-4]) #13: s[-2:-4] >>> []