python的切片函数挺特别的。在此记录一下。
函数原型:
slice(stop)
slice(start, end[, step])
函数可以用在 list tuple string 上。
用法
构造一个list
>>>l = range(100)
步长为正
简写下 正向取值,start是0可以省略,end是末尾可以省略,步长默认是1
取全部的的数,
>>>l[slice(0, len(l))]
>>>l[:]
从0到50每两个数取一个数,0可以省略
>>>l[slice(0, 50, 2)]
>>>l[0:50:2]
>>>l[:50:2]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48]
从30到list末尾
>>>l[slice(30, len(l))]
>>>l(30:)
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
slice函数不会造成下标越界
>>>l[slice(30, len(l)+30)]
>>>l(30:len(l)+30)
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
倒数取值
>>>l[slice(-5, -1)]
>>>l[-5:-1]
[95, 96, 97, 98]
>>>l[slice(-len(l), -1)]
>>>l[:-1]
#全部的数
步长为负数的情况
步长为负数其实是将取得的list反转。
简写下 正向取值,start是头部可以省略,end是0可以省略
反向取值,start是0可以省略,end是尾部可以省略
正向取值加负数步长
>>>l[slice(40, 20, -1)]
>>>l[40:20:-1]
[40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21]
反向取值加负数步长
>>>l[slice(-20, -40, -1)]
>>>l[-20:-40:-1]
[80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61]
总结
通常情况下,都会用简写来表达。不习惯的时候尽量不要省略参数,别给自己找trouble。
步长为正,start < end,结果正向排列。
步长为负,start > end,结果反向排列。
网友评论